如何使用带指针的转换构造函数?

时间:2012-12-24 22:49:51

标签: c++ constructor type-conversion implicit-conversion

我有一个可以转换为类C的类A和一个以A*作为参数的函数。我想用C*来调用它,但我似乎无法使用转换构造函数。我得到:error: cannot convert ‘C*’ to ‘A*’ for argument ‘1’ to ‘void doSomething(A*)’。我做错了什么?

class C {
};

class A {
public:
    A(C* obj) {}
};

void doSomething(A* object);

int main()
{
    C* object = new C();
    doSomething(object);
}

3 个答案:

答案 0 :(得分:5)

转换构造函数只能为用户定义的类型定义,在您的案例A中。但是,它们不适用于基本类型作为指针,如A*

如果doSomething正在使用A const&代替(或仅仅是A,则会调用转换构造函数如你所料。

答案 1 :(得分:3)

如果您的主要要求是能够调用现有的doSomething函数,那么您可以这样做:

int main()
{
    C* object = new C();
    A a(object);
    doSomething(&a);
    // May need to delete object here -- depends on ownership semantics.
}

答案 2 :(得分:0)

您可能意味着您希望C成为A的子类:

class C : public A {
...
};