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

Undefined reference to vtable in constructor

本文关键字:未定义 引用 vtable 构造函数      更新时间:2023-10-16

首先,我知道有很多关于这个问题的问题,但我没有找到解决方案,所以我决定写它。

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

家长.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(){} 
}

孩子。

#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:对 vtable 的未定义引用ChildNamespace::Child

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

提前谢谢。

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

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

我希望这对你有所帮助