error LNK2005
-
ich habe ein kleines Spiel mit der SDL (SimpleMediaLayer) geschrieben doch beim debuggen kommen immer folgende Linkfehler und ich weis nicht wiso.
Framework.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
1>Framework.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
1>Framework.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
1>Framework.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
1>Game.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
1>Game.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
1>Game.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
1>Game.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
1>main.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
1>main.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
1>main.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
1>main.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
1>Sprite.obj : error LNK2005: _SDL_main ist bereits in CShot.obj definiert.
1>Sprite.obj : error LNK2005: "class CTimer * g_pTimer" (?g_pTimer@@3PAVCTimer@@A) ist bereits in CShot.obj definiert.
1>Sprite.obj : error LNK2005: "class CFramework * g_pFramework" (?g_pFramework@@3PAVCFramework@@A) ist bereits in CShot.obj definiert.
1>Sprite.obj : error LNK2005: "struct SDL_Surface * m_pScreen" (?m_pScreen@@3PAUSDL_Surface@@A) ist bereits in CShot.obj definiert.
1>LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========Ich würde mich sehr über hilfe freuen
-
Diese Fehler kommen nicht beim Debuggen, sondern beim Linken. Der Linker sagt dir, dass SDL_main, g_pTimer, g_pFramework und m_pScreen mehrfach definiert sind. Ich würde mal vermuten, dass du die in einen Header geschrieben hast, der in mehreren .cpp Files inkludiert wird!? Das geht natürlich nicht...
-
nein habe ich nicht ich habe gerade den kompletten Quellcode durchgeschaut.
-
kann es sein das es daran ligt weil ich visual 2012 und 2010 auf dem rechner habe?
-
Nein, es liegt daran, dass die genannten Dinge mehrfach definiert sind, wie ja selbst die Fehlermeldungen schon klar und deutlich sagen...
-
Wahrscheinlich steht in einer deiner Header-Dateien sowas wie "CTimer *g_pTimer;", was dann von all deinen cpp's includet wird, weshalb es mehrere g_pTimer gibt, was der Linker nicht mag.
Schreib stattdessen "CTimer *g_pTimer;" in genau eine cpp und "extern CTimer *g_pTimer;" in den Header, dann gehen die Linkerfehler weg.
-
aber bei einem neuen projekt mit nur einer leeren klasse kommt auch dieser fehler :
LINK : fatal error LNK1123: Fehler bei der Konvertierung in COFF: Datei ist ungültig oder beschädigt.
-
Der kommt möglicherweise daher, dass die SDL Library, die du da zu linken versuchst, kaputt oder eben einfach keine für den Compiler passende Library ist...