Frage zu Headern



  • Hallo,

    Ich habe folgendes Problem; auf das Einfachste reduziert habe ich drei Dateien:

    • client.cpp
    • filesys.h
    • filesys.cpp

    Nun entspricht der Inhalt von filesys.h Folgendem:

    [...]
    #define DEFAULT_WORKDIR "C:\\"
    extern string workdir;
    [...]
    

    Der Inhalt von filesys.cpp:

    [...]
    #include "filesys.h"
    string workdir = DEFAULT_WORKDIR;
    [...]
    

    Und der von client.cpp:

    [...]
    #include "filesys.h"
    [...]
    

    Nun erhalte ich vom Linker folgende Fehlermeldung: multiple definition of 'workdir'
    Ich habe bereits viel rumprobiert und rumgeschrieben, aber eigentlich denke ich, dass es so, wie ich es hier wiedergegeben habe, richtig sein müsste. Kann mir jemand den Denkfehler aufzeigen?

    Mfg



  • das ist ganz einfach, in filesys.cpp musst du das "string" wegnehmen. workdir wurde schon in filesys.h als string so definiert, dass die definition auch in den dateien gilt, die filesys.h includen 😉



  • PeterBücherwurm schrieb:

    das ist ganz einfach, in filesys.cpp musst du das "string" wegnehmen. workdir wurde schon in filesys.h als string so definiert, dass die definition auch in den dateien gilt, die filesys.h includen 😉

    Eine extern-Deklaration sagt dem Compiler nur dass es zur Link-Zeit so ein Objekt geben wird. Eine Definition (und die ist nur mit Datentyp vollständig) muss trotzdem genau einmal vorhanden sein.

    @OP: Dein Code ist so korrekt. Der Fehler muss noch irgendwo anders liegen. Hast Du die .cpp evtl. mehrfach in Deinem Projekt?


Anmelden zum Antworten