在控制台应用程序中,编译文件 A.cpp 和 B.cpp 时遇到意外错误。这两个文件都包含以下代码:
#include "stdafx.h" int k;
但是,编译过程会生成错误:
Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj
此错误源于违反“单一定义规则”。在 C 中,每个变量、函数和对象只能定义一次。在您的例子中,您已经在 A.cpp 和 B.cpp 中定义了变量“k”。
如果您愿意要在两个文件中使用相同的命名变量,可以利用无名命名空间(匿名命名空间)来避免冲突。
namespace { int k; }
通过将“k”封装在命名空间中,可以有效地将其范围限制为
如果您打算在多个文件之间共享“k”变量,您可以采用外部声明和定义的技术:
A.h(头文件)
extern int k;
A.cpp
#include "A.h" int k = 0;
B.cpp
#include "A.h" // Use 'k' variable as needed
在这种情况下,您在 A.h 中将变量声明为外部变量,并在 A.cpp 中定义它。 B.cpp文件只需要包含A.h即可访问变量,避免定义冲突。
以上是当我在多个 C 文件中定义相同的变量时,为什么会收到“错误 LNK2005:已定义?”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!