Heim > Backend-Entwicklung > C++ > Hauptteil

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

DDD
Freigeben: 2024-10-30 08:39:27
Original
920 Leute haben es durchsucht

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>
Nach dem Login kopieren

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>
Nach dem Login kopieren

A.cpp

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

B.cpp

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

// Use `k` anywhere in the file</code>
Nach dem Login kopieren

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!

Quelle:php.cn
Erklärung dieser Website
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
Beliebte Tutorials
Mehr>
Neueste Downloads
Mehr>
Web-Effekte
Quellcode der Website
Website-Materialien
Frontend-Vorlage
Über uns Haftungsausschluss Sitemap
Chinesische PHP-Website:Online-PHP-Schulung für das Gemeinwohl,Helfen Sie PHP-Lernenden, sich schnell weiterzuentwickeln!