2015-04-23 114 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; 
}