2014-08-30 100 views
0

我有一個基地和多個派生類如下。C++如何從多個派生類調用基類方法?

class Base 
{ 
public: 
    virtual bool add(int); //has defined in BaseA.cpp 
    ... 
}; 
class DerivedA: protected Base 
{ 
public: 
    ... 
} 
class DerivedB: public DerivedA 
{ 
public: 
    void test(); 
    ... 
} 

如何調用add()方法,它是在BaseDerivedB類的方法?

void DerivedB::test(){ 
    Base::add(10); 
} 

當我這樣做時,它沒有說「未定義的參考」。

感謝

+0

你甚至定義了基類方法嗎? – 0x499602D2 2014-08-30 02:06:28

+0

[它運行良好,沒有任何錯誤。](http://ideone.com/P9ydcZ)我猜可能'obj'丟失> o < – ikh 2014-08-30 02:11:20

+0

順便說一句,你爲什麼要使用受保護的繼承? – ikh 2014-08-30 02:11:35

回答

2

你正確地調用它。

你錯過了,正如錯誤信息所示,定義Base::add(int)

基本上你需要鏈接BaseA.cpp。

1

您的語法無誤。如果您獲得未定義的參考,則表示錯誤處於鏈接階段。這可能發生三個原因:

  1. .cpp文件(在您的情況下BaseA.cpp)沒有得到編譯。如果您使用的是Eclipse CDT,那麼該實用程序將自動編譯所有源文件,但是如果您有自己的生成文件或者您正在手動編譯這些文件,那麼請確保所有.cc文件都正確編譯。

  2. .cpp文件正在編譯但未鏈接。檢查最終可執行文件正在創建的命令,並確保正在使用所有的.o文件。

  3. 您還沒有在BaseA.cpp文件中爲Base的添加功能提供定義。

我用你的代碼編譯了一個測試程序,如果滿足上述所有條件,它運行正常。

希望這會有所幫助。

相關問題