Linkerprobleme



  • also ich habe folgendes Problem:
    in einem Header: "GlobalDef.h" sind Variablen Definiert die ich für Arbeiten mit DirectX9 benötige.So zbs. LPDIRECT3DDEVICE9.
    Ich möchte aber nicht alles in eine Datei Quetschen, also würde ich zbs. alles was mit DirectInput zu tuen hat extern machen "GameControll.h/GameControll.cpp".
    das Problem ist jetzt nur das ich für die die DirectInput Funktionen ja die Variablen Brauche.
    ich muss "GlobalDef.h" also im Prinzip in "main.cpp", und in "GameControll.cpp" includieren und das habe ich auch getan,
    nur leider erhalte ich Linkerfehler wie:

    1>main.obj : error LNK2005: "struct IDirect3DDevice9 * g_pd3dDevice" (?g_pd3dDevice@@3PAUIDirect3DDevice9@@A) ist bereits in GameControll.obj definiert.

    Ich kann mir diesen Linkerfehler aber nicht erklären. 😕
    ich habe nichts versehentlich doppelt Definiert, bin extra nochmal drüber gegangen, nur wo kommt dann der Linkererror her?
    Wäre schön wenn mir jemand erklären könnte wo der Fehler herkommt und wie ich ihn in den Griff bekomme.

    Schon mal Danke im voraus SKVG.



  • Doch, du hast doppelt definiert. Daher sind deine globalen Variablen (Fehler 1) im Header (Fehler 2) keine gute Idee. Du bindest den Header mehrfach ein, also stehen, nachdem der Präprozessor seine Arbeit getan hat, einmal globale Variablen in main.cpp und dann noch mal Variablen gleichen Namens in GameControll.cpp (btw, Control schreibt sich mit einem 'l' 🙂 ). Bedenke: ein include ist nur reines Text kopieren. Was im Header steht, steht dann in der cpp-Datei, wenn kompiliert wird. Jetzt klar, warum du doppelte Definitionen hast? Man könnte das Problem z.B mit extern lösen, aber sinnvoller ist es wohl, gleich auf globale Variablen zu verzichten und das Programm vernünftig zu designen.



  • Der Linker macht da keine Probleme. Das ist ein Anwenderproblem.

    http://lmgtfy.com/?q=c%2B%2B+one+definition+rule


Log in to reply