multiple definition



  • Hallo,

    bisher habe ich meine Dateien immer mit

    #include "myheaderfile.h"
    

    includiert.

    Jetzt hab ich mir ne kleine Library geschrieben,
    so dass ich die jetzt mit

    #include <mylib/myheaderfile.h>
    

    includiere.

    Den Pfad übergeb ich natürlich beim Kompilieren und linken.
    Er kompiliert auch fehlerfrei, allerdings meldet er beim Linken
    der Klassen:

    multiple definition of `Class::method()'

    Was kann ich dagegen tun?

    Gruß,
    Jens



  • Moin schrieb:

    Was kann ich dagegen tun?

    Keine Definitionen in den Header-File schreiben. 😉 :xmas1: 😉



  • häh...
    Dafür sind header doch da...

    Wie soll ich sonst die Methoden aufrufen?



  • In die Header gehören nur Deklarationen (extern-Variablen und Funktionsprototypen), die zugehörigen Definitionen kommen in die passenden Quell-Dateien. Auf diese Weise bekommt der Linker nur eine Version deiner Funktion übergeben, mit der er dann weiterarbeiten kann.

    (PS: Ausnahme sind nur Templates und Inline-Funktionen, da muß der Compiler bereits die Definition sehen, um sie verarbeiten zu können)


Anmelden zum Antworten