我有许多对象,所有对象都有不带参数的构造函数。我定义了基类的简单构造函数,我还没有定义其他的。在编译时,我收到每个类的“未声明的构造函数引用”错误,但如果我尝试定义派生对象的构造函数,则会出现更加混乱的错误。 以下是“怪异”的错误:
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;
};
答案 0 :(得分:0)
确保您的非纯虚拟方法在某处实现并且正在链接。见GCC FAQ:
因此,如果您未能定义此特定方法,链接器可能会抱怨显然不相关的符号缺乏定义......
解决方案是确保定义所有非纯的虚拟方法。请注意,即使将析构函数声明为纯虚拟,也必须定义析构函数。