У меня есть класс 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);
}
Конверсионные конструкторы можно определить только для пользовательские типы, в твоем случае A
, Тем не менее, они не относятся к основные типы как указатели лайк A*
,
Если doSomething
брал A const&
вместо (или просто A
), тогда конструктор преобразования будет вызван, как вы ожидаете.
Если вашим основным требованием является возможность вызова существующей функции doSomething, то вы можете сделать это:
int main()
{
C* object = new C();
A a(object);
doSomething(&a);
// May need to delete object here -- depends on ownership semantics.
}
Вы, вероятно, имеете в виду, что вы хотите, чтобы C был подклассом A:
class C : public A {
...
};