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

时间:2017-11-10 14:42:25

标签: c++ inheritance linker-errors vtable

首先,我知道有很多问题但是我没有找到解决方案,所以我决定写一下。

我正在开发一个C ++项目,我需要使用多态。为了解决我的问题,我将其简化为两个类:Parent和Child。 Parent只有虚方法,而Child必须实现它们。唯一要实例化的类是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的未定义引用

我尝试过其他问题的回复,但没有成功。我想我看不到简单的东西,所以请帮忙!

提前致谢。

1 个答案:

答案 0 :(得分:1)

你需要实现纯虚函数,添加Child :: 开始方法 在Child.cc

 #include "Child.hh"
 namespace ChildNamespace {
     Child::Child(){}
     Child::~Child(){}   
     int Child::Start(){
         return 0;
     }
 }

我希望这可以帮到你