为什么Visual Studio在链接包含的文件时会出错
Why does Visual Studio error when linking having files included?
我不太明白这背后的原因,但我想我已经找到了原因。
我哥哥正在做一个家庭作业项目,他们正在使用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
什么,我没有?
在项目文件中包括classes.h
、general_functions.cpp
和class_functions.cpp
以及main.cpp
。当我删除一般和类函数时,msbuild运行得很好。把它们中的任何一个放回去,然后boom。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++-试图将函数指针推回到另一个CPP文件中的矢量时出错
- .h 和.cpp文件分离时出错,但仅使用 .h 文件时没有错误.我做错了什么?
- 在 C/C++ 中打开驻留在 "/sys/" 下的文件时出错
- 在头文件中定义变量不会出错
- 如何在多写入器情况下对文件支持的共享内存中的大页面出错
- JNI,使用两个 .so 文件时出错,其中一个文件需要另一个文件
- 生成文件中隐式规则中的 -c 标志出错
- 编译时出错 - 链接.cpp和头文件
- 从人员矢量插入和读取文件时出错
- LNK2019 在文件中调用静态成员的方法时出错.cpp
- ./main:加载共享库时出错:libopencv_highgui.so.4.0:无法打开共享对象文件:没有这样的文件或
- 猫鼬 - 包含标准C++库文件时出错
- 在f2c.h文件中定义min()max()宏时出错
- ASIOSDK;从hostsample.cpp生成mex文件时出错
- 使用emscripten将c++文件转换为wasm时出错
- 编译后可执行文件出错
- 头文件C++出错
- ftell 非常大的文件出错
- 从磁盘读取映像文件出错