0

我最近开始学习一些C(在 youtube 上观看了“Buckys C++ 编程教程”的前 30 个视频),在我认为我对基础知识有所了解之后,我就去了制作 d3d hacks 的教程(如果你知道的话,就逃跑)等等上。

所以我有我要写的东西的来源,它工作得很好,但我不知道为什么我会得到一个"LNK2019 unresolved external symbol error"

我很确定错误是我的 main.cpp 无法读取我告诉它的内容。(我只能通过谷歌搜索和论坛搜索一段时间才知道这一点。)

“错误 3 错误 LNK2019:无法解析的外部符号“bool __cdecl CompareColour(struct tagRGBQUAD *,int,int,int,int)”(?CompareColour@@YA_NPAUtagRGBQUAD@@HHHH@Z) 在函数“void __cdecl ScanBMP(class ScanContents * )" (?ScanBMP@@YAXPAVScanContents@@@Z) C:\Users\Sherm\Desktop\当前项目\颜色瞄准器\颜色瞄准器\main.obj 颜色瞄准器 "

这就是错误。我已经多次检查了我的 include/lib,并且 main.cpp 包含在项目中。

另外:这里是项目文件:http ://www.mediafire.com/?3gy76bqvf687h4i

(是的,我可以复制粘贴我拥有的源并解决问题,但是学习的重点是什么)

4

1 回答 1

1

在您的main.cpp文件中,您对该CompareColour函数有一个前向声明,但它从未实现过。你在那里的main.cpp内容告诉编译器“我保证稍后我会告诉你如何做到这一点,现在假设它存在”,因此它为该函数创建了一个“外部符号”。然后你“违背你的诺言”并且从不告诉它怎么做CompareColour,所以它会出现链接错误,因为它无法将该外部符号链接到任何代码。

所以看一下TakeScreenShot功能。在第 5 行有一个向前减速。然后在第 42 行开始执行它。因此,当TakeScreenShot在第 91 行调用时,编译器会使用来自第 5 行的信息创建一个“外部符号”,该信息指向一个空的代码点。然后当它完成时,它返回并在第 42 行查看函数的实现,并将其放置在该外部符号的目标位置。然后,当链接器遍历文件时,它将这两个代码点链接起来,一切都很愉快。当链接器遇到它时,调用CompareColor仍然指向空代码,因为没有实现,因此你的错误。

这是实际情况的过度简化版本,但希望它是有道理的。

于 2013-05-08T06:11:38.853 回答