У меня проблема с назначением дочернего указателя на родительский. Вот пример:
class A() {};
class B() : public A {};
class C() {
B* b;
C() { b = new B(); }
B* GetB() { return b; }
}
C* c = new C();
A* a = c->GetB(); //compilation error
Почему это происходит? Если я напишу это:
A* a = (A*)c->GetB();
тогда это работает, но я хочу знать, почему это происходит.
Это всего лишь пример, я не могу раскрыть реальный код, поэтому, если вы обнаружите синтаксическую ошибку, это потому, что я только что написал ее. Спасибо!
РЕДАКТИРОВАТЬ:
Мой редактор говорит мне, что: «значение типа B * не может быть присвоено объекту типа A *». Что это значит?
Это всего лишь пример, я не могу раскрыть реальный код, поэтому, если вы обнаружите синтаксическую ошибку, это потому, что я только что написал ее. Спасибо!
Вы не должны быть слишком ленивыми, чтобы обеспечить правильный пример, который на самом деле напоминает вашу проблему.
Я не получаю ошибок компиляции, используя правильный синтаксис C ++ с вашим примером в MSVC 2012.
class A // why () ?!
{
};
class B : public A
{
};
class C
{
private:
B* b;
public: // missing
C (void) : b(new B) { }
B * get_b() { return b; }
}; // missing ";"
int main(void)
{
C* c = new C;
A* a = c->get_b(); // no compilation error
return 0;
}
Почему ваш редактор говорит вам, что вы не можете назначить, не совсем понятно, так как вы не сказали нам, какой редактор вы используете.
Других решений пока нет …