C++ 不带“的未解析外部符号;引用于;领域

C++ 不带“的未解析外部符号;引用于;领域,c++,linker-errors,extern,C++,Linker Errors,Extern,因此,通常当您看到未解决的外部符号错误时,链接器至少会告诉您引用所在的函数,即 未解析的外部符号“class1::function1”**在函数“class2::function2”中引用*** 但是当你只拿到上半场的时候你会怎么做?i、 e 未解析的外部符号“class1::function1” 我知道“class1::function1”是在哪里定义的,我故意不包括它。因此,仅仅包含包含定义的文件是没有帮助的。include与文件中包含的符号的所有引用一起被ifdef'd删除。我需要的是找到

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

未解析的外部符号“class1::function1”**在函数“class2::function2”中引用***

但是当你只拿到上半场的时候你会怎么做?i、 e

未解析的外部符号“class1::function1”


我知道“class1::function1”是在哪里定义的,我故意不包括它。因此,仅仅包含包含定义的文件是没有帮助的。include与文件中包含的符号的所有引用一起被ifdef'd删除。我需要的是找到对这个故意不包含的符号的引用的方法,这样我就可以去掉它。搜索符号的名称只会显示我已经定义过的内容。

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

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

如果您正在使用该类的实例,我认为最好的办法是删除virtual关键字。否则,您必须提供一个定义,即使只是一个存根


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

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

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


谢谢你的投入,艾伦,这让我看到了正确的方向。我会投你一票,但在发布问题之前我就加入了,因此我缺乏这样做的声誉评分。

谢谢你的建议。我刚试过,没什么区别。它可以很好地完成编译,但仍然会得到相同的链接器错误。@jbcarpen,这听起来很有趣,有没有可能有些东西无法重新生成?在这种情况下,它将尝试链接到一些与当前代码不对应的旧对象,并且在编译阶段被忽略,因为它的日期在将来,或者不作为源代码包含,而只是作为库依赖项?只是尝试了一个完全干净的构建,仍然没有更改。它是一个虚拟函数吗?是的,以前应该包括这个。完整的错误签名是
未解析的外部符号“public:virtual void\uu thiscall class1::function1”
这是我所说的一个变体-派生类构造函数还需要引用基类的vtable,以及虚拟函数。(链接器不太了解类,只知道函数和变量。)