-5

我在将子指针分配给父指针时遇到问题。这是示例:

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

4

1 回答 1

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

为什么您的编辑器告诉您无法分配并不是很明显,因为您没有告诉我们您使用的是哪个编辑器。

于 2013-06-14T15:04:11.473 回答