[C++] Linker Problem (LNK2005)

frager

Erfahrenes Mitglied
Also ich habe folgendes Problem:
ich habe eine Datei namens abc.h
in dieser Datei definiere ich eine Konstante mit dem keyword const
außerdem befindet sich in der datei ein Funktionsprototy test(), der
in der datei abc.cpp definiert wird.
Wenn ich nun mein Programm compilieren will erhalte ich diesen Linker-Fehler:
test.obj : error LNK2005: "char const * const mstr" (?mstr@@3PBDB) bereits in abc.obj definiert
und noch mal zur Veranschaulichung:
abc.h
| const char *mstr = "abc";
| extern void test();
|--> abc.cpp
| test() {cout << mstr;}
|--> test.cpp
main(blabla...) {test();return0}
So. Das problem habe ich schon seit 2 Tagen :mad:
in der MSDN steht:
Der häufigste Grund für diesen Fehler ist das versehentlich gleichzeitige Binden mit den Single-Threaded- und Multithreaded-Bibliotheken. Stellen Sie sicher, daß die Anwendungsprojektdatei nur geeignete Bibliotheken einbezieht und Bibliotheken von Fremdanbietern über entsprechend erstellte Single-Threaded- oder Multithreaded-Versionen verfügen
bloß sagt mir das ganze nix :mad: :mad:
Und wer sich noch mehr verwirren lassen will, bitte:
MSDN
Ok, ich bin jetzt mit meinen nerven fertig, gute Nacht
 

Anhänge

Weil du die globale Variable mstr in der abc.h definierst, die sowohl von den Dateien abc.cpp als auch test.cpp (also zweimal) inkludiert wird, hast du die Definiton der Variablen beim Linken zweimal. Besser wäre es, in die Headerdatei dies zu schreiben:
Code:
extern const char *mstr;
Dadurch wird die Variable nur deklariert (bekanntgemacht), es wird aber kein Platz dafür reserviert.
In eine der .cpp-Dateien kommt dann die tatsächliche Deklaration:
Code:
const char *mstr = "abc";
Dann sollte alles glatt gehen.
 
Zuletzt bearbeitet:
Zurück