C++笔记-关于LNK2019和LNK2001的解决思路(2024-12-03)
② 写代码应该满足面向对象基本原则,至少要写成高内聚低耦合,一样的功能要抽出来放一起,为什么会出现2个同样的文件名(不在同一目录)并且里面还及其相似。工作这么多年了,还在记录LNK2019和LNK2001这个感觉有点菜了,但这次一定要记录下这个问题,因为感觉很具有代表性。有两个同名的.h文件,不在同一个目录,里面的内容还特别的像,刚好这个项目的include都包含了这2个目录。① include一
背景
工作这么多年了,还在记录LNK2019和LNK2001这个感觉有点菜了,但这次一定要记录下这个问题,因为感觉很具有代表性。
感觉改老项目时应该会经常遇到。
关于LNK2019和LNK2001,说白了就是程序在链接时,找不到对应实现的地方,就会报这个错。大多数情况是链接到动静态库时会出现。
我这边出现这个问题的原因,归根结底是管理方面的问题。下面描述下:
有两个同名的.h文件,不在同一个目录,里面的内容还特别的像,刚好这个项目的include都包含了这2个目录。
在Linux上编译及链接一点问题都没有。放到windows上用msvc2010就出现问题了。
过程
QT5的项目,pro文件使用了include包含了当前项目目录和当前目录下新建的一个目录A。都有一个同名的文件XX.h以及对应的XX.cpp。
MSVC编译时无问题,链接时出现LNK2019、LNK2001。
解决方法:
方法一:某一个重名的.h中,使用namespace。并且调用时,需要using。
方法二:不用的那个直接给他.bak,重命名。
其实感觉出现这个问题的本质原因就是:
pro文件中include当前项目目录,和新建目录A。这是根本原因。我感觉这种方式不好原因如下:
① include一般是引用第三方库时,才用的,自己include自己,这个感觉太奇怪了。
② 写代码应该满足面向对象基本原则,至少要写成高内聚低耦合,一样的功能要抽出来放一起,为什么会出现2个同样的文件名(不在同一目录)并且里面还及其相似。这不合理。

火山引擎开发者社区是火山引擎打造的AI技术生态平台,聚焦Agent与大模型开发,提供豆包系列模型(图像/视频/视觉)、智能分析与会话工具,并配套评测集、动手实验室及行业案例库。社区通过技术沙龙、挑战赛等活动促进开发者成长,新用户可领50万Tokens权益,助力构建智能应用。
更多推荐
所有评论(0)