Преобразование типов между различными типами неявным образом - PullRequest
1 голос
/ 16 августа 2011

Мне нужно неявное преобразование из A * в C *;я не могу изменить определение или реализацию А.

class A
{
};

struct B: public A
{
};

struct C: public B
{

};

, когда я пишу следующее:

A* p;
C* q = p;

я получаю ошибку C2440;не может конвертировать из A * в C *.что я могу сделать, учитывая тот факт, что я не могу изменить A. оба класса являются простыми структурами примитивных данных.

1 Ответ

5 голосов
/ 16 августа 2011

Единственный способ сделать это - использовать приведение:

// a C++ style static_cast:
C* q = static_cast<C*>(p);

// or the less verbose C-style cast
C* q = (C*)p;

Поскольку C является производной от A, а не каждый A является C, он не может быть неявно приведен (как вы могли бы неявно привести C* к A*, поскольку каждый C является A (т. Е. A имеет «меньше или равных характеристик», чем C, но не более)).

Я сомневаюсь, что на самом деле должно иметь неявное приведение между типами указателей. Что заставляет вас думать, что вы делаете?

...