Sehr merkwürdiger Linker-Fehler

Ryu1991

Erfahrenes Mitglied
Hi,
Ich habe eine Fehlermeldung mit der Ich gar nichts angangen kann, und zwar folgende:
Code:
1>Requests.obj : error LNK2005: "class std::vector<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> >,class std::allocator<class std::basic_string<char,struct std::char_traits<char>,class std::allocator<char> > > > BF::Buffers" (?Buffers@BF@@3V?$vector@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@V?$allocator@V?$basic_string@DU?$char_traits@D@std@@V?$allocator@D@2@@std@@@2@@std@@A) ist bereits in Bitefight_CMD_Bot.obj definiert.

Und zwar Betrifft die eine Globale Variable die sich in einem Namespace befindet:

C++:
/... code
namespace BF{
  //...more code
  std::vector<std::string> Buffers;
}

Ich benutze Visual Studio 9.0 das ist eine Konsolenanwendung und Vor-Kompilierte Header sind Aktiviert.

Irgendjemand ne Idee ?
 
Zuletzt bearbeitet von einem Moderator:
Hallo,

verboten ist das nicht. Allerdings führt das dazu, dass die Variable in jeder Übersetzungseinheit, in welcher die Headerdatei eingebunden wird, neu definiert wird. Es entstehen so mehrere „Kopien“ ein und derselben Variable. Der Linker erkennt dies beim Zusammenführen der Objektdateien und bricht wegen der Mehrdeutigkeit ab.

Lösungsvorschlag: definiere die Variable in einer *.cpp-Datei und deklariere sie in der Headerdatei als extern.

Grüße,
Matthias
 
Ok, danke für den Hinweis, Ich habe das Ganze inzwischen so umgeschrieben, das die Variable ein Member einer Klasse ist, somit is das ganze unproblematisch.
 
Zurück