对派生类的构造函数的未声明引用
Undeclared reference to constructor of derived classes
我有很多对象,它们都有不带参数的构造函数。我定义了基类的简单构造函数,其他的没有定义。编译时,我会收到每个类的"未声明的构造函数引用"错误,但如果我试图定义派生对象的构造函数,我会遇到更令人困惑的错误。以下是"奇怪"的错误:
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常见问题:
因此,如果您未能定义此特定方法,链接器可能会抱怨缺乏对明显不相关的符号的定义。。。
解决方案是确保定义所有非纯的虚拟方法。请注意,即使声明为纯虚拟,也必须定义析构函数。
相关文章:
- #ifdef和未声明的标识符
- 对C宏的未定义引用,但在定义它时会出现重新定义错误
- 编译时的 CImg 库返回对"__imp_SetDIBitsToDevice"的未定义引用
- 对Py_Initialize()的未定义引用
- 使用mysql c++连接器的未定义引用
- 未声明的标识符编译暗黑破坏神 2 程序"muleview"
- 在顶点着色器中使用 OpenGl 的未声明标识符,我在顶点着色器中绘制三角形时遇到问题
- Google protobuf 时间戳未声明标识符,在 Windows 上具有C++
- 对 Scalar ::Scalar() 的未定义引用
- 在气泡排序程序中未声明错误功能
- 对已定义方法的未定义引用、标头中的声明和源匹配
- 对派生类的构造函数的未声明引用
- "未定义的引用"与"未声明"
- CLASS_NAME未声明 - 无法dynamic_cast(目标不是指向完整类型的指针或引用)
- 对..的未定义引用..在试图声明数组的嵌套类中
- 更改函数声明后对函数的未定义引用
- 无法在 main 中声明嵌套类的即时。"对 Class::NestedClass::NestedClass() 的未定义引用;
- 未在此作用域中声明的信号/对class::方法的未定义引用
- 不断收到"错误:使用未声明的标识符'cout'和错误:无法解析对重载函数的引用
- Qt中对静态声明变量的未定义引用