构建 C++ 时,链接器说我的构造函数、析构函数或虚拟表未定义,但我定义了它们
ISO C++ 标准指定必须定义类的所有非纯虚拟方法,但不要求对违反此规则 [class.virtual]/8 的行为进行任何诊断。基于此假设,GCC 将仅在定义其第一个此类非内联方法的翻译单元中发出隐式定义的构造函数、赋值运算符、析构函数和类的虚拟表。
因此,如果您未能定义此特定方法,链接器可能会抱怨缺少明显不相关符号的定义。 不幸的是,为了改善此错误消息,可能需要更改链接器,但这并不总是可以完成。
解决方案是确保定义所有非纯虚拟方法。请注意,即使声明为纯虚拟 [class.dtor]/7,也必须定义析构函数。
我采用的解决方案是搜索类名并查找虚拟方法声明并检查是否有定义。我没有找到任何其他解决方案。