Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.07.2009, 13:00

Linker probleme bei vector in Header

Hallo,

ich bin grad dabei mich mit DirectX und Engine-Systemen zu beschäftigen und benutze als speicherung der Objekte ein STL-Array(vector), welches in der Header 'psObject.h' steht:

C-/C++-Quelltext

1
vector<psObjectI> ps_objects;


Diese Header wird von einer Main-Header(psEngine.h) eingebunden.
Diese wiederrum wird von allen Cpp-Dateien eingebunden.
Allerdings kommen jetzt folgende Linker-Fehlermeldungen:


Quellcode

1
2
3
4
5
1>psCamera.obj : error LNK2005: "class std::vector<class psObjectI,class std::allocator<class psObjectI> > ps_objects" (?ps_objects@@3V?$vector@VpsObjectI@@V?$allocator@VpsObjectI@@@std@@@std@@A) ist bereits in main.obj definiert.
1>psEngine.obj : error LNK2005: "class std::vector<class psObjectI,class std::allocator<class psObjectI> > ps_objects" (?ps_objects@@3V?$vector@VpsObjectI@@V?$allocator@VpsObjectI@@@std@@@std@@A) ist bereits in main.obj definiert.
1>psLight.obj : error LNK2005: "class std::vector<class psObjectI,class std::allocator<class psObjectI> > ps_objects" (?ps_objects@@3V?$vector@VpsObjectI@@V?$allocator@VpsObjectI@@@std@@@std@@A) ist bereits in main.obj definiert.
1>psMaterial.obj : error LNK2005: "class std::vector<class psObjectI,class std::allocator<class psObjectI> > ps_objects" (?ps_objects@@3V?$vector@VpsObjectI@@V?$allocator@VpsObjectI@@@std@@@std@@A) ist bereits in main.obj definiert.
1>psObject.obj : error LNK2005: "class std::vector<class psObjectI,class std::allocator<class psObjectI> > ps_objects" (?ps_objects@@3V?$vector@VpsObjectI@@V?$allocator@VpsObjectI@@@std@@@std@@A) ist bereits in main.obj definiert.


Ich benutze MS Visual Cpp 2008 Express.

Vielen Dank im vorraus.

Lg.
Achtung ich!

Sylence

Community-Fossil

Beiträge: 1 663

Beruf: Softwareentwickler

  • Private Nachricht senden

2

01.07.2009, 13:04

Also die Compiler bzw. Linkermeldungen sind doch eigentlich in 90% aussagekräftig genug.

Du hast in jeder cpp Datei, die deinen header inkluded die gleiche Variable. Deshalb existiert sie eben schon (Überraschung).

Entweder du musst sie als extern deklarieren oder du verabschiedest dich direkt von globalen variablen und machst es gleich ordentlich.

3

01.07.2009, 13:14

Ok. danke. das mit dem extern funktioniert genau richtig.


Zitat

verabschiedest dich direkt von globalen variablen und machst es gleich ordentlich.


Was meinst mit 'ordentlich'?

Lg.
Achtung ich!

4

01.07.2009, 13:30

Er meint globale Variablen sind böse.
Wenn man sie vermeiden kann, sollte man es auch machen.

5

01.07.2009, 13:41

aha. ok. danke.

Lg.
Achtung ich!

Werbeanzeige