gpt4 book ai didi

c++ - 为什么在链接包含文件时 Visual Studio 出错?

转载 作者:行者123 更新时间:2023-11-28 07:01:53 25 4
gpt4 key购买 nike

我不太明白这背后的原因,但我想我已经弄明白是什么了。

我哥哥正在做一个家庭作业项目,他们使用的是 Visual Studio。他在编译项目时遇到了问题。相关项目包括:

main.cpp
classes.h
class_functions.cpp
general_functions.cpp

它们具有以下导入结构:

main.cpp

#include "classes.h"
#include "class_functions.cpp"
#include "general_functions.cpp"

class_functions.cpp

#include "classes.h"

general_functions.cpp

#include "classes.h"

他在尝试编译时不断遇到链接错误,尽管 g++ 可以很好地编译它。所以我尝试通过 Visual Studio 命令提示符和 cl。这编译得很好,所以我尝试了 msbuild ,但(显然?)失败了。我进入了 vxproj 文件,因为嘿,它告诉 cl 我不是什么?

在 proj 文件中,它包括 classes.hgeneral_functions.cppclass_functions.cpp,以及 main .cpp。当我删除通用函数和类函数时,msbuild 运行得很好。将它们中的任何一个放回去并繁荣classes.h 包含

#ifndef myclasses
#define myclasses
/* Code here */
#endif

其他 .cpp 文件包含类似的指令。

我终于想出了消除问题的办法——消除

#include "general_functions.cpp"
#include "class_functions.cpp"

来自代码库,现在 Visual Studio 可以很好地编译它。

问题是为什么?这样做的理由或可能的好处是什么?

最佳答案

.cpp 和 .h 文件的区别在于,.h 文件通常包含在 #include 指令中,而 .cpp 文件包含在链接过程中。

#include 指令将在您正在编译的代码中插入包含文件的拷贝,因此通过包含 .cpp 文件,您将编译一个包含所有 .cpp 文件的源文件。这是非常糟糕的做法,但仍然可以工作。

但是,如果您随后还在链接步骤中添加 .cpp 文件,那么您将第二次添加这些文件,从而创建可能重复的函数定义,例如链接器错误。我认为这可能是主要错误(没有我只是猜测的链接器错误代码)。

关于c++ - 为什么在链接包含文件时 Visual Studio 出错?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22314681/

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