У меня проблема c виртуальным наследованием:
#include "stdafx.h"
class A {
};
class B : public virtual A {
};
int _tmain(int argc, _TCHAR* argv[])
{
B *b;
A *pa=b;
b = (B*) pa;
return 0;
}
error C2635: cannot convert a 'A*' to a 'B*'; conversion from a virtual base class is implied
Если забрать virtual то все роботает, помогите, как мне привести типы?????????
Добавлена раскраска кода — Кодт
Здравствуйте, patriotyk, Вы писали:
P>У меня проблема c виртуальным наследованием:
Такое преобразование невозможно. Стандарт 5.2.9/5
An lvalue of type “cv1 B”, where B is a class type, can be cast to type “reference to cv2 D”, where D is a
class derived (clause 10) from B, if a valid standard conversion from “pointer to D” to “pointer to B” exists
(4.10), cv2 is the same cv-qualification as, or greater cv-qualification than, cv1, and B is not a virtual base
class of D.
Еcли бы класс A имел виртуальные функции, для подобного преобразования можно было бы воспользоваться dynamic_cast.