fehlermeldung beim exe erstellen trotz fehlerfreier kompilierung



  • jo,ich hab mir mit vc++ ein kleines windowsprogramm geschrieben, dessen einzige aufgabe ist ein fenster zu öffnen(das war ein echtes glücksgefühl, als ich das hinbekam 😃 )
    nun, da ichn kleiner ordnungsfreak bin, hab ich die einzelnen funktionen ausgelagert,und die winmain funktion alleine in ne datei gesperrt(natürlich hab ich diesmal nicht vergessen, die passenden header und quellcode dateien zu includen 😮 )

    aufjedenfall hat vc++ mir das ganze wieder fehlerfrei compiliert, aber als ich die exe erstellen wollte, da ich wissen wollte, ob wirklich alles funktioniert wies sollte, gab er mir folgende fehlermeldungen aus:

    windowfunktionen.obj : error LNK2005: "long __stdcall WindowProc(struct HWND__ *,unsigned int,unsigned int,long)" (?WindowProc@@YGJPAUHWND__@@IIJ@Z) already defined in Hauptprogramm.obj
    windowfunktionen.obj : error LNK2005: "int __cdecl initwindow(int,int,char *,struct HINSTANCE__ *)" (?initwindow@@YAHHHPADPAUHINSTANCE__@@@Z) already defined in Hauptprogramm.obj
    windowfunktionen.obj : error LNK2005: "bool Progbeenden" (?Progbeenden@@3_NA) already defined in Hauptprogramm.obj
    windowfunktionen.obj : error LNK2005: "struct HWND__ * hwnd" (?hwnd@@3PAUHWND__@@A) already defined in Hauptprogramm.obj
    Debug/spiel.exe : fatal error LNK1169: one or more multiply defined symbols found

    ehrlich gesagt, ich weis nich woran es liegt. bisher hab ich immer mit borland c++ gearbeitet, aber da das trial abgelaufen ist musste ich wohl oder übel auf vc++ zurückgreifen, und bin nu doch etwas überascht 😃



  • Includegards vergessen?



  • öhm,wenn ich mich nich verschrieben hab, hab ich nix vergessen^^

    #ifndef windowh
    #define windowh
    #include <windows.h>
    int initwindow(int,int,char*,HICON);
    LRESULT  CALLBACK WindowProc(HWND hwnd,  UINT message,
                                 WPARAM wParam,  LPARAM lParam);
    #endif;
    


  • held: Nein.

    Du hast anscheinend Definitionen in einem Header (mehrere Funktionen und Variablen). In Header gehören nur Deklarationen.



  • hmm...der header den ich da oben gepostet hab ist mein einziger,und er sieht mir relativ richtig aus 😃



  • Dann hast du wohl irgendwo ein cpp-File #included?



  • otze schrieb:

    // ...
    LRESULT  CALLBACK WindowProc(HWND hwnd,  UINT message,
                                 WPARAM wParam,  LPARAM lParam);
    #endif; // <--
    

    Kommt das Semikol da nicht weg?



  • ja, aber as ist nicht das problem^^

    @bashar stimmt, ich hab die funktionen in mein hauptprogramm includet,und soweit ich weis is das doch erlaubt oder?^^



  • Aber dann ist es doch einmal in dem Hauptprogramm und einmal in dem Modul, dass du aus irgendeinem mir unverständlichen Grund einbindest.



  • // foo.cpp
    
    void bla ()
    {
    }
    
    // haupt.cpp nach prärpocessor
    
    // hier stand mal #include "foo.cpp"
    void bla ()
    {
    }
    

    Und schon ist es zweimal da. 😮



  • ich glaub ich muss dir nich erklären was passiert, wenn du eine funktion in eine andre datei auslagerst und sie dann ohne die datei nur mit dem header wieder aufrufen willst :p



  • otze schrieb:

    ich glaub ich muss dir nich erklären was passiert, wenn du eine funktion in eine andre datei auslagerst und sie dann ohne die datei nur mit dem header wieder aufrufen willst :p

    Doch mach mal, bin sehr gespannt auf deine Ausführungen.



  • omg, ok,öhm...
    *indieeckegehundschmoll*

    nagut, durch das includen einer solchen cpp file verhindert man, dass man fehler sieht, die das problem schnell gelöst hätten 🙄


Anmelden zum Antworten