我有一个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);
}
当我执行上述操作时,未能说出“未定义的参考”。
由于
答案 0 :(得分:2)
您正确调用它。
正如错误消息所示,您错过了Base::add(int)
的定义。
基本上你需要链接BaseA.cpp。
答案 1 :(得分:1)
您的语法是正确的。如果您获得未定义的引用,则表示错误处于链接阶段。出现这种情况有三个原因:
.cpp文件(在您的情况下为BaseA.cpp)未编译。如果您正在使用Eclipse CDT,那么该实用程序将自动编译所有源文件,但如果您有自己的makefile或手动编译文件,那么请确保正确编译所有.cc文件。
.cpp文件正在编译但未获取链接。检查创建最终可执行文件的命令,并确保正在使用所有.o文件。
您没有在BaseA.cpp文件中为Base的add函数提供定义。
我使用您的代码编译了一个测试程序,如果满足上述所有条件,它就可以正常运行。
希望这有帮助。