# [C++] Linker Problem (LNK2005)



## frager (19. Juli 2004)

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 
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   
Und wer sich noch mehr verwirren lassen will, bitte:
MSDN
Ok, ich bin jetzt mit meinen nerven fertig, gute Nacht


----------



## Kachelator (20. Juli 2004)

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:  
	
	
	



```
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:

```
const char *mstr = "abc";
```
  Dann sollte alles glatt gehen.


----------



## frager (20. Juli 2004)

jo, danke


----------



## Kachelator (20. Juli 2004)

Bitte! 

frager, du fragst zuviel. Leg dir einen anderen Nick zu -- ich habe schon Löcher im Bauch!


----------

