繁体   English   中英

函数中引用的未解析的外部符号

[英]Unresolved external symbol referenced in function

我意识到如果不为您提供大量代码(我会尽力避免),这是一个很难回答的问题。

本质上我在 X 类中遇到了这个错误,它 #includes Y 类标头。 Y 类标头具有三种吸气剂定义

// Getters
static ID3D10Device* PDevice();
static ID3D10Buffer* PBuffer();
static ID3D10Buffer* IBuffer();

我得到三个相同的错误,都发生在 X 类中。所以基本上错误是:

未解析的外部符号 ID3D10Device* PDevice() 在函数中引用(X 类的构造函数)

对不起,如果这有点含糊。 知道为什么会这样吗? 我用谷歌搜索了它,但我只能对这个错误是什么做出有根据的猜测。

首先,这是链接器错误。 此链接器错误意味着找不到损坏的名称PDevice等。

你能确保你有一个与定义相匹配的函数的实现吗? 此外,可能很明显,但只是检查你实际上有一个实现。 如果您的实现位于外部库中,请确保已在链接器中包含其他库。

希望有所帮助!

确保将包含类Y的定义和实现的文件添加到项目中,以便链接器在Yo文件中找到符号

确保正确设置依赖项(添加lib文件)。 在Visual Studio中,您可以通过“ 属性” - >“链接器” - >“输入” - >“其他依赖项”来执行此操作 在文本框中,您现在可以输入.lib文件的名称。

发生这种情况的另一个原因是 C 和 C++ 源文件都用于创建二进制文件。 编译器对 C 符号和 C++ 符号使用不同的命名机制。 请阅读这篇精彩文章中的“Adding C++ To The Picture”部分。 例如,原因之一是 C++ 中的函数重载。 函数的符号名称包括函数签名(参数类型及其顺序)。 引用这篇文章,“所有关于函数签名的信息都被破坏成文本形式,并且成为链接器看到的符号的实际名称。 ”所以,当 C 代码文件需要调用定义的函数时在 C++ 文件中,C 代码的目标文件仅提及该 C++ 函数的名称(不包括函数签名)。 然而,C++ 目标文件包含经过修饰的名称(其中包括函数签名)。 因此,链接器报告“ error LNK2019: unresolved external symbol FOO_CPP_FUNC referenced in BAR_C_FUNC ”。 建议的解决方案是在 C++ 函数的声明和定义周围添加一个 extern "C"。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM