【发布时间】:2020-03-30 14:48:30
【问题描述】:
我正在使用 Visual Studio 2019。我创建了一个新的 C++ 控制台应用程序。我的 Source Files 文件夹中有一个 Main.cpp 文件,代码如下:
#include <iostream>
int i = 10;
int main()
{
std::cout << i << std::endl;
std::cin.get();
}
我在我的 Source Files 文件夹中创建了第二个名为 File2.cpp 的文件,其中只有以下行:
int i = 2;
如果我尝试编译此代码,我会收到错误消息“找到一个或多个多重定义的符号”。为什么即使我没有在 Main.cpp 中明确完成#include "File2.cpp",我也会收到此错误?
更新: 但是,如果我删除 File2.cpp 并将其替换为我的 Header Files 文件夹中名为 File2.h 的文件(仅包含一行:int i = 2),以及所有其他在相同的情况下,它编译得很好。与前面的例子类似,唯一的区别是第二个文件不是 .cpp 源文件,而是一个 .h 头文件。
【问题讨论】:
-
编译 Main.cpp 时,它定义了一个全局变量
int i。编译 File2.cpp 时,它定义了一个全局变量int i。当两个生成的目标代码文件链接在一起(以及一些使您的程序运行的实现启动代码)时,链接器会遇到 twoi's。简而言之,这是一个链接时间的事情,由编译时间的事情产生,由于编码决策的事情......这就是你进入画面的地方。