2011-06-09 123 views
2

有時,我正在處理相對複雜的問題(並且有時會混淆 - 以最初編寫它的人的佈局方式)抽象類。從它繼承時,我有時會遇到cannot instantiate abstract class,大部分時間是因爲我忘記聲明&實現了一個純虛函數。我可以從編譯器獲得更多關於它找到的函數的信息,我沒有實現它而不是尋找它?有關「無法實例化抽象類」的更多信息

+2

您是否使用Visual Studio?然後從錯誤列表選項卡切換到輸出。會有這樣的錯誤:'錯誤C2259:'foo':由於以下成員,無法實例化抽象類:[缺少純虛擬成員]' – Fanael 2011-06-09 15:16:20

+1

@Fanael:正是我所要求的!我不知道輸出結果如何。如果你把這個作爲答案,我會檢查它。 – Samaursa 2011-06-09 15:17:58

回答

4

您是否使用Visual Studio?如果是,則從錯誤列表選項卡切換到輸出選項卡。會有這樣的:

main.cpp(8): error C2259: 'foo' : cannot instantiate abstract class 
      due to following members: 
      'void Foo::method(char)' : is abstract 
2

每當你遇到的消息,然後立即意味着你還沒有定義在派生類virtual功能,並希望創建它的一個實例。如果你使用的是一個好的編譯器,那麼我敢肯定,它表明哪個純粹的virtual函數你沒有實現。至少,GCC表明這一點。

在這裏看到的錯誤消息:http://www.ideone.com/83iDk

prog.cpp: In function ‘int main()’:
prog.cpp:11: error: cannot declare variable ‘a’ to be of abstract type ‘A’
prog.cpp:6: note: because the following virtual functions are pure within ‘A’:
prog.cpp:7: note: virtual void A::f()

那是綽綽有餘的,你沒有實現A::f()

+1

Visual Studio也指出了這一點(感謝Fanael指出它)。謝謝! (1) – Samaursa 2011-06-09 15:20:30