Присвоение ребенка родителю

У меня проблема с назначением дочернего указателя на родительский. Вот пример:

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 *». Что это значит?

-5

Решение

Это всего лишь пример, я не могу раскрыть реальный код, поэтому, если вы обнаружите синтаксическую ошибку, это потому, что я только что написал ее. Спасибо!

Вы не должны быть слишком ленивыми, чтобы обеспечить правильный пример, который на самом деле напоминает вашу проблему.
Я не получаю ошибок компиляции, используя правильный синтаксис 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;
}

Почему ваш редактор говорит вам, что вы не можете назначить, не совсем понятно, так как вы не сказали нам, какой редактор вы используете.

1

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]