错误 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中文网其他相关文章!