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

时间:2013-11-26 00:35:33

标签: c++

我有许多对象,所有对象都有不带参数的构造函数。我定义了基类的简单构造函数,我还没有定义其他的。在编译时,我收到每个类的“未声明的构造函数引用”错误,但如果我尝试定义派生对象的构造函数,则会出现更加混乱的错误。 以下是“怪异”的错误:

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;
};

1 个答案:

答案 0 :(得分:0)

确保您的非纯虚拟方法在某处实现并且正在链接。见GCC FAQ

  

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

     

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

相关问题