没有"referenced in"字段的未解析外部符号

unresolved external symbol with no "referenced in" field

本文关键字:符号 外部 referenced in 字段 没有      更新时间:2023-10-16

因此,通常当您看到未解析的外部符号错误时,链接器至少会告诉您引用在哪个函数中,即

unresolved external symbol "class1::function1" **referenced in function "class2::function2"**

但是当你只得到上半场时,你会怎么做?即

unresolved external symbol "class1::function1"

我知道"class1::function1"的定义在哪里,我故意不包括它。 因此,仅包含包含定义的文件无济于事。 包含是ifdef'd,以及对文件中包含的符号的所有引用。 我需要的是一种方法来定位对这个故意不包含的符号的引用,以便我可以摆脱它。 搜索符号的名称只会显示我已经知道的事情。

如果它是一个虚函数,那么它从 vtable 引用,而 vtable 又从每个构造函数(或内联构造函数的每个位置)引用。

如果您使用的是类的实例,我认为最好的选择是删除虚拟关键字。否则,您必须提供定义,即使只是存根。

(语言标准通过考虑始终使用的任何虚函数来处理这个问题,因此需要一个定义。

我不确定为什么会发生这种情况,但确定问题来源的简单方法是注释掉 class1::function1 的所有声明,然后重建项目 - 每当在编译阶段调用 class1::function1 而不是链接时,编译器就会抱怨。

事实证明,这是我的错误和无用的错误消息的组合。 其中一个类缺少其继承链的成员。

就我个人而言,我本来希望这会导致编译器错误("扩展未定义的基类"或类似的东西),但相反,我得到了所述基类中虚拟函数的链接器错误(尽管该类不包括在内)。 但由于实际上没有函数引用它们,因此链接器无法为错误消息提供"引用位置"部分。 我仍然不完全理解为什么这组代码问题会给出这组错误消息,但我能够修复它。

谢谢艾伦的投入,它让我朝着正确的方向前进。 我会投票给你,但在发布问题之前立即加入,我缺乏这样做的声誉分数。

相关文章: