将孩子分配给父母

时间:2013-06-14 14:05:50

标签: c++ pointers upcasting

我在将父指针指定给父指针时遇到问题。这是一个例子:

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 *类型的实体”。这是什么意思?

1 个答案:

答案 0 :(得分:1)

  

这只是一个例子,我无法透露真实的代码,所以如果你发现语法错误,那是因为我刚刚编写了它。谢谢!

您不应该太懒,不能提供实际上与您的问题类似的正确示例。 在MSVC 2012中使用正确的C ++语法,我没有得到任何编译错误。

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;
}  

为什么你的编辑告诉你,由于你没有告诉我们你正在使用哪个编辑器,你不能分配不是很明显。