我有一个可以转换为类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);
}
答案 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 {
...
};