gpt4 book ai didi

c++ - 在不同项目中使用 header 时出现 LINK2001 错误

转载 作者:行者123 更新时间:2023-11-30 03:00:50 25 4
gpt4 key购买 nike

我在 C++ 和 VS 方面经验不足,我不知道自己做错了什么,更重要的是如何解决它。

我正在研究一个包含多个项目的解决方案,现在我开始在另一个项目中使用一个项目中的类。但是,我收到此错误:

tlibdecoder.lib(TDecCu.obj) : error LNK2001: unresolved external symbol "public: void __thiscall CURegister::registerCU(int,int,int)" (?registerCU@CURegister@@QAEXHHH@Z)

问题似乎是我在 TDecCu.cpp 中使用的函数,它来自文件 CURegister.h 和 CURegister.cpp。

在 CURegister.cpp 之上,我包含了 CURegister.h,因此定义了函数(我可以通过导入 CURegister.h 在同一项目中正常使用它),但是当我将 header 包含到 TDecCu.cpp 中时(通过添加#include "CURegister.h"in the top) 似乎有问题。

谁能告诉我如何解决这个问题?请记住,我没有经验,所以不要介意解释得很简单 ;)

提前致谢。B

最佳答案

“未解析的符号错误”是链接器 错误,与编译器 错误相对。链接是 Visual Studio 等 IDE 中看似单个“构建”事件的第二阶段。

这里的核心问题是 the distinction between declarations and definitions in C++ .简而言之,声明编译器引入一个符号(如函数),而定义提供该符号的实际实例化/实现对于链接器。在考虑函数时,定义就是您可能听说过的原型(prototype)。像这样:

void registerCu(int x, int y, int depth);

请注意,它不提供函数的实现,因此它只是一个定义。这与提供完整实现的声明不同:

void registerCu(int x, int y, int depth)
{
// do magic stuff here
}

如果这是一个独立的项目,您可以假设链接器错误提醒您未能提供函数的定义。这可能意味着您在某个地方的 header 中编写了一个原型(prototype),但实际上并没有在相应的 .cpp 文件中写入函数的内容。

但是由于您对 infact 的回答的评论表明您确实在 .cpp 文件中提供了实现,并且问题表明您正在处理多个项目,所以第二个更有可能项目无法找到函数定义。您已经包含了第一个项目的 header ,该 header 为第二个项目提供了声明,因此编译器很高兴。但是,当链接器开始实际尝试链接该函数调用的目标代码时,它会感到失望,因为它找不到定义。

通过指示第二个项目的链接器在第一个项目的目标代码中查找它找不到的任何定义来解决此问题。您通常通过将包含第一个项目的构建输出的文件夹的路径添加到第二个项目的链接器设置来执行此操作。

关于c++ - 在不同项目中使用 header 时出现 LINK2001 错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/11666047/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com