首页  >  文章  >  后端开发  >  为什么我的 Win32 控制台应用程序中出现“Error LNK2005: Multiple Definitions”错误?

为什么我的 Win32 控制台应用程序中出现“Error LNK2005: Multiple Definitions”错误?

DDD
DDD原创
2024-10-31 00:45:02861浏览

Why am I getting the

错误 LNK2005:多个定义

在 Win32 控制台应用程序中,您有两个源文件,A.cpp 和 B.cpp,每个包含以下代码:

<code class="cpp">#include "stdafx.h"
int k;</code>

编译时遇到错误:

Error 1 error LNK2005: "int k" (?a@@3HA) already defined in A.obj

解释:

此错误源于违反一个定义规则。在 C 中,每个全局变量或函数在所有翻译单元(源文件)中只能有一个定义。在您的情况下,A.cpp 和 B.cpp 都定义了变量 k,导致多个定义和链接错误。

解决方案:

解决此问题,请考虑以下选项:

1。使用匿名命名空间:

如果您需要在 A.cpp 和 B.cpp 中都使用变量 k,但又想避免外部链接,则可以使用匿名命名空间:

<code class="cpp">namespace 
{
    int k;
}</code>

2.使用extern:

如果需要在多个文件之间共享变量k,则应在头文件(A.h)中将其声明为extern,并在一个源文件(例如A.cpp)中定义它):

A.h

<code class="cpp">extern int k;   </code>

A.cpp

<code class="cpp">#include "A.h"
int k = 0;</code>

B.cpp

<code class="cpp">#include "A.h"

// Use `k` within B.cpp</code>

通过遵循这些解决方案,您可以避免 k 的多个定义并成功编译您的应用程序。

以上是为什么我的 Win32 控制台应用程序中出现“Error LNK2005: Multiple Definitions”错误?的详细内容。更多信息请关注PHP中文网其他相关文章!

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