C++ 构造函数中对vtable的未定义引用

C++ 构造函数中对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

首先,我知道这方面有很多问题,但我没有找到解决办法,所以我决定写下来

我正在研究C++项目,我需要使用多态性。为了解决我的问题,我把它简化为两个类:Parent和Child。父级只有虚拟方法,子级必须实现它们。将被实例化的唯一类是子类。下面是代码:

Parent.hh

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()