首页  >  文章  >  后端开发  >  当我在多个 C 文件中定义相同的变量时,为什么会收到“错误 LNK2005:已定义?”错误?

当我在多个 C 文件中定义相同的变量时,为什么会收到“错误 LNK2005:已定义?”错误?

Patricia Arquette
Patricia Arquette原创
2024-10-30 01:43:29766浏览

Why am I getting the

错误:“错误 LNK2005:已定义?”

在控制台应用程序中,编译文件 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中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn