对派生类的构造函数的未声明引用

Undeclared reference to constructor of derived classes

本文关键字:未声明 引用 构造函数 派生      更新时间:2023-10-16

我有很多对象,它们都有不带参数的构造函数。我定义了基类的简单构造函数,其他的没有定义。编译时,我会收到每个类的"未声明的构造函数引用"错误,但如果我试图定义派生对象的构造函数,我会遇到更令人困惑的错误。以下是"奇怪"的错误:

CMakeFiles/project4.dir/src/Strategy.cpp.o: In function `ForwardStrategy':
/home/ics45c/projects/p4/src/Strategy.cpp:42: undefined reference to `vtable for
ForwardStrategy'

我的基类构造函数如下所示:

ForwardStrategy::ForwardStrategy()
{
}

所有其他构造函数都是这样的(每个构造函数都有不同的数字):

ForwardStrategy1::ForwardStrategy1()
{
}

非常感谢您的帮助!

编辑:这是类声明:

class ForwardStrategy
{
public:
    ForwardStrategy();
    virtual ~ForwardStrategy() = default;
    virtual bool isWorthForwarding(Message::Message* m) = 0;
    virtual void setType(unsigned int type);
    virtual void setQuality(unsigned int q);
private:
    unsigned int type;
    unsigned int quality;
};

确保您的非纯虚拟方法在某个地方实现并链接。请参阅GCC常见问题:

因此,如果您未能定义此特定方法,链接器可能会抱怨缺乏对明显不相关的符号的定义。。。

解决方案是确保定义所有非纯的虚拟方法。请注意,即使声明为纯虚拟,也必须定义析构函数。