【发布时间】:2017-11-10 14:42:24
【问题描述】:
首先,我知道有很多关于这个的问题,但我没有找到解决方案,所以我决定写它。
我正在开发一个 C++ 项目,我需要使用多态性。为了解决我的问题,我将其简化为两个类:Parent 和 Child。 Parent 只有虚方法,而 Child 必须实现它们。唯一将被实例化的类是 Child。所以,这里是代码:
父母.hh
namespace ParentNamespace {
class Parent {
public:
Parent();
~Parent();
virtual int Start() = 0;
};
}
父母.cc
#include "Parent.hh"
using namespace ParentNamespace;
namespace ParentNamespace {
Parent::Parent(){}
Parent::~Parent(){}
}
孩子.hh
#include "Parent.hh"
namespace ChildNamespace {
class Child : public ParentNamespace::Parent {
public:
Child();
~Child();
int Start();
};
}
Child.cc
#include "Child.hh"
namespace ChildNamespace {
Child::Child(){}
Child::~Child(){}
int Start(){
return 0;
}
}
它编译没有错误(它生成 .o 文件),但是当它必须链接它们时,它会显示以下错误:
在函数
ChildNamespace::Child::Child(): Child.cc:8:中未定义对ChildNamespace::Child的vtable 的引用
我已经尝试过其他问题的回答,但没有成功。我想我看不到简单的东西,所以请帮忙!
提前致谢。
【问题讨论】:
-
@Nepho 我已经看过了,还有几十个类似的,它没有帮助......最后,当你开始写标题时,它显示了类似的问题。还是谢谢你。
-
那么,你能发布你的 Makefile 的内容/你用来编译文件的命令吗?应该不难看出错误在哪里。
-
将
Parent的析构函数设为虚拟。 -
另外,它是
int Child::Start()而不是int Start()。
标签: c++ inheritance linker-errors vtable