C ++如何从多个派生类调用Base类方法?

时间:2014-08-30 02:05:38

标签: c++

我有一个Base和多个派生类,如下所示。

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()类方法中调用Base类中的DerivedB方法?

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

当我执行上述操作时,未能说出“未定义的参考”。

由于

2 个答案:

答案 0 :(得分:2)

您正确调用它。

正如错误消息所示,您错过了Base::add(int)定义

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

答案 1 :(得分:1)

您的语法是正确的。如果您获得未定义的引用,则表示错误处于链接阶段。出现这种情况有三个原因:

  1. .cpp文件(在您的情况下为BaseA.cpp)未编译。如果您正在使用Eclipse CDT,那么该实用程序将自动编译所有源文件,但如果您有自己的makefile或手动编译文件,那么请确保正确编译所有.cc文件。

  2. .cpp文件正在编译但未获取链接。检查创建最终可执行文件的命令,并确保正在使用所有.o文件。

  3. 您没有在BaseA.cpp文件中为Base的add函数提供定义。

  4. 我使用您的代码编译了一个测试程序,如果满足上述所有条件,它就可以正常运行。

    希望这有帮助。