2013-10-07 67 views
1

最近,我偶然發現了另一個C++問題,這給我帶來很多困難。假設我們有小程序:指向虛擬類

class A { 
    public: 
    virtual bool c() = 0; 
    virtual bool b() = { return false; }; 
    virtual ~A() {} 
} 

class B : public A { 
    public: 
    bool b() = { return true; }; 
    ~B() {} 
} 

... 

void c(A *pointer) { 
    if (pointer->b()) { 
    cout << "Derived class"; 
    } 
} 

在這種情況下,編譯器的方法C()與誤差「成員訪問到不完整的類型A」的「如果」行返回錯誤。有人可以解釋爲什麼編譯器返回這樣的錯誤嗎?如果解除異常確實是正確的,那我該如何預防呢?

非常感謝!

+2

你真的試着編譯你發佈的代碼嗎?代碼中有幾處語法錯誤。順便說一下:我複製了你的代碼並修復了簡單的錯誤。一切都很好。 –

回答

3

「不完整的類型A」表示在您正在編譯的代碼中(但不是您發佈的代碼),在c中使用它之前沒有定義A。您需要將該定義放在與c相同的源文件中,或者從該源文件包含的頭文件中。

+0

確實!我剛剛意識到我忘了包含「A」的定義。不管怎麼說,還是要謝謝你! – jrbn