C++ 构造函数中对vtable的未定义引用
首先,我知道这方面有很多问题,但我没有找到解决办法,所以我决定写下来 我正在研究C++项目,我需要使用多态性。为了解决我的问题,我把它简化为两个类:Parent和Child。父级只有虚拟方法,子级必须实现它们。将被实例化的唯一类是子类。下面是代码: Parent.hhC++ 构造函数中对vtable的未定义引用,c++,inheritance,linker-errors,vtable,C++,Inheritance,Linker Errors,Vtable,首先,我知道这方面有很多问题,但我没有找到解决办法,所以我决定写下来 我正在研究C++项目,我需要使用多态性。为了解决我的问题,我把它简化为两个类:Parent和Child。父级只有虚拟方法,子级必须实现它们。将被实例化的唯一类是子类。下面是代码: Parent.hh namespace ParentNamespace { class Parent { public: Parent(); ~Parent(); virtual int Sta
namespace ParentNamespace {
class Parent {
public:
Parent();
~Parent();
virtual int Start() = 0;
};
}
Parent.cc
#include "Parent.hh"
using namespace ParentNamespace;
namespace ParentNamespace {
Parent::Parent(){}
Parent::~Parent(){}
}
Child.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的引用
我尝试了其他问题的回答,但没有成功。我想我看不到简单的东西,所以请帮忙
提前感谢。您需要实现纯虚拟功能,添加子项::
启动方法
在Child.cc中
#include "Child.hh"
namespace ChildNamespace {
Child::Child(){}
Child::~Child(){}
int Child::Start(){
return 0;
}
}
我希望这对你有所帮助See@Nepho我已经看过了,还有几十个类似的,都没有帮助。。。最后,当你开始写标题时,它会显示类似的问题。无论如何谢谢你。那么,你能发布你的Makefile的内容/你用来编译文件的命令吗?应该不难看出错误在哪里。将Parent
的析构函数设为虚拟。此外,它是int Child::Start()
而不是int Start()
。