Heim > Backend-Entwicklung > C++ > Hauptteil

Warum erhalte ich in meinem C-Projekt den Fehler „Fehler LNK2005: bereits definiert'?

Susan Sarandon
Freigeben: 2024-11-02 11:16:02
Original
551 Leute haben es durchsucht

Why am I Getting

Das Geheimnis des Fehlers LNK2005 enthüllen: Mehrere Definitionen verstehen

Beim Arbeiten mit mehreren C-Dateien innerhalb eines Projekts wird der „Fehler LNK2005“ bereits angezeigt „Definiert“-Nachricht kann ein verwirrendes Hindernis sein. Dieser Fehler bedeutet, dass im Projekt mehrere Definitionen derselben Variablen oder Funktion vorhanden sind. Um dieses Problem genauer zu untersuchen, betrachten wir ein konkretes Beispiel.

Das problematische Szenario

Stellen Sie sich eine Win32-Konsolenanwendung vor, die aus zwei Dateien besteht: A.cpp und B.cpp. Beide Dateien enthalten nur Folgendes:

#include "stdafx.h"
int k;
Nach dem Login kopieren

Beim Kompilieren tritt der Fehler auf:

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

Die Wurzel des Problems: Verstoß gegen die One-Definition-Regel

Das diesem Fehler zugrunde liegende Grundprinzip ist die in C durchgesetzte „One Definition Rule“ (ODR). Diese Regel schreibt vor, dass jede Variable oder Funktion im gesamten Projekt nur eine definitive Definition haben darf. In diesem Szenario versuchen sowohl A.cpp als auch B.cpp, dieselbe Variable „k“ zu definieren, was gegen die ODR verstößt. Infolgedessen stößt der Linker auf einen Konflikt und löst die Fehlermeldung aus.

Behebung des Problems

Um diesen Fehler zu beheben, können Sie zwei Hauptansätze anwenden:

Ansatz 1: Nutzung namenloser Namespaces

Wenn Sie dies beabsichtigen Wenn Sie dieselbe Variable über mehrere Übersetzungseinheiten hinweg (z. B. CPP-Dateien) gemeinsam nutzen, sollten Sie die Verwendung eines namenlosen Namespace in Betracht ziehen. Ein namenloser Namespace kapselt die Variable in ihrem eigenen Bereich und macht sie außerhalb dieses Bereichs unzugänglich.

namespace {
    int k;
}
Nach dem Login kopieren

Ansatz 2: Externe Variablen

Alternativ, wenn nötig Wenn Sie eine Variable über mehrere Dateien hinweg gemeinsam nutzen, aber ihre Zugänglichkeit für externen Code beibehalten möchten, verwenden Sie das Schlüsselwort „extern“. Bei diesem Ansatz wird die Variable in einer Header-Datei (z. B. A.h):

extern int k;
Nach dem Login kopieren

deklariert und anschließend in einer der Implementierungsdateien (z. B. A.cpp) definiert:

#include "A.h"
int k = 0;
Nach dem Login kopieren

Das obige ist der detaillierte Inhalt vonWarum erhalte ich in meinem C-Projekt den Fehler „Fehler LNK2005: 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
Neueste Artikel des Autors
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!