2015-04-23 82 views
-1

我已经定义了这样的两个类:派生类不能被转化为基类分配

class A{}; 
class B : public A{}; 

而且我还定义了一个函数返回一个指向B:

B* func(); 

为什么我不能做这样的事情?

A* a = NULL; 
a = func(); 

我以为我使用的是动态绑定,但实际上我错了。

----------------- update ----------------------------

对不起,我错了,我正在做一个大项目,以便错误消息不能很好地工作。

问题是由头文件造成的,因为A和B分别在不同的头文件中定义。

+4

什么让你觉得你不能? – CoffeeandCode

+2

[Works for me](http://coliru.stacked-crooked.com/a/71c2b586dfdee6da)。你能否提供一个实际的[MCVE](http://stackoverflow.com/help/mcve)? – Angew

+1

它的工作原理。请提供实际的代码和错误消息。 – Sergey

回答

1

此示例程序编译成功

#include <iostream> 

class A { public: virtual ~A() = default; }; 
class B : public A {}; 

B* func() { return new B(); } 

int main() 
{ 
    A *a = func(); 

    delete a; 

    return 0; 
}