Heim  >  Artikel  >  Backend-Entwicklung  >  Warum erhalte ich in meiner Win32-Konsolenanwendung den Fehler „Fehler LNK2005: „int k“ bereits definiert“?

Warum erhalte ich in meiner Win32-Konsolenanwendung den Fehler „Fehler LNK2005: „int k“ bereits definiert“?

DDD
DDDOriginal
2024-10-30 08:39:27920Durchsuche

Why Am I Getting

Fehler LNK2005: „int k“ bereits definiert

Beim Verknüpfen einer Win32-Konsolenanwendung mit mehreren C-Dateien wird ein Fehler „Fehler LNK2005: Es kann vorkommen, dass „int k“ (?a@@3HA) bereits in A.obj definiert ist. Dieser Fehler tritt auf, wenn eine Variable mit demselben Namen in mehreren Dateien definiert ist.

Im gegebenen Beispiel definieren sowohl A.cpp als auch B.cpp eine Variable k. Gemäß der One-Definition-Regel muss jede globale Variable oder Funktion eine einzige Definition haben. Mehrere Definitionen führen zu Unklarheiten und Verknüpfungsfehlern.

Lösungen:

Um diesen Fehler zu beheben, können Sie die folgenden Ansätze verwenden:

Namenlosen Namespace (anonymen Namespace) verwenden:

Wenn die Variable k für jede Datei privat sein soll, verwenden Sie einen namenlosen Namespace, um die Kollision von Symbolnamen zu verhindern.

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

Dadurch wird das Symbol k in jeder Datei isoliert und verhindert, dass andere Dateien darauf zugreifen oder es neu definieren.

Variable in separaten Dateien deklarieren und definieren:

Wenn Sie etwas teilen müssen Wenn Sie die Variable k über mehrere Dateien hinweg verwenden, deklarieren Sie sie mit extern in der Header-Datei und definieren Sie sie in einer separaten Kompilierungseinheit.

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` anywhere in the file</code>

Durch die Deklaration von k als extern in der Header-Datei können andere Dateien darauf zugreifen und es verwenden ohne es neu zu definieren.

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meiner Win32-Konsolenanwendung den Fehler „Fehler LNK2005: „int k“ bereits definiert“?. Für weitere Informationen folgen Sie bitte anderen verwandten Artikeln auf der PHP chinesischen Website!

Stellungnahme:
Der Inhalt dieses Artikels wird freiwillig von Internetnutzern beigesteuert und das Urheberrecht liegt beim ursprünglichen Autor. Diese Website übernimmt keine entsprechende rechtliche Verantwortung. Wenn Sie Inhalte finden, bei denen der Verdacht eines Plagiats oder einer Rechtsverletzung besteht, wenden Sie sich bitte an admin@php.cn