Makefile Problem: multiple definitions...



  • Hallo!

    In meinem Programm gibt es ein .cpp File mit main() und anderen Funktion, sowie ein dazugehöriges .h File mit den Prototypen der Funktionen und einem Namespace in dem ein Haufen globale Einstellungen in vielen Variablen stehen.
    Außerdem gibts im Programm eine Klasse (ebenfalls in .cpp und .h aufgeteilt).

    So, das Problem ist nun, daß alle Dateien gegenseitig voneinander abhängen - auf die Variablen im Namespace wird beispielsweise in jeder Datei zugegriffen.

    Dadurch kommts aber zu dem Fehler:

    LDAPObject.o(.bss+0xf4):/root/smbldapmgr/LDAPObject.h:79: multiple definition of `CFG::additionalInfoFile'
    smbldapManager.o(.bss+0xf4):/usr/include/g++/sstream:453: first defined here

    Tja, normal umgehe ich solche multiple defined Sachen indem ich die betreffenden Variablen statisch mache - aber in diesem Fall geht das nicht.

    Kann mir da irgendjemand einen Tipp geben?
    Thx!



  • Das wird nicht viel mit Linux zu tun haben, ich behaupte einfach mal Du hast nicht nur Deklarationen in Deinen .h Dateien, sprich die Aufteilung ist nicht korrekt (besser gesagt, in den .h Dateien steht noch zu viel). Häufigste Ursachen für sowas sind m.E. eine vergessene extern-Angabe und/oder Wertzuweisung bei globalen Objekten oder ein Methodenrumpf ausserhalb der Klasse, aber in der .h und ohne inline-Kennzeichnung.



  • hi, ja, in der .h steht noch zu viel, und zwar der Namespace mit den ganzen Variablen drin... muss ich die etwa ins cpp File packen und dann jede einzelne mit extern nochmal ins .h file schreiben?



  • Jap... Und die Initialisierungen auch. Dasselbe gilt für static Member.

    /* .h */
    extern int a;
    extern Klasse o;
    class x {
      static int m;
    };
    
    /* .cpp */
    int a = 0;
    Klasse o;
    int x::m = 12;
    

    EDIT: Für eine Gruppe wär natürlich ein struct mit Initialisierungsliste in der .cpp schöner...



  • Tatsächlich, jetzt habe ich den ganzen Namespace nochmal als extern geschrieben und ein #include gelöscht und jetzt gehts!
    Super, danke!



  • Dieser Thread wurde von Moderator/in kingruedi aus dem Forum Linux/Unix in das Forum C++ verschoben.

    Im Zweifelsfall bitte auch folgende Hinweise beachten:
    C/C++ Forum :: FAQ - Sonstiges :: Wohin mit meiner Frage?

    Dieses Posting wurde automatisch erzeugt.


Anmelden zum Antworten