header doppelt -> multiple definitions?



  • Hallo,

    ich versuche einen header der eine funktion trägt in einer datei/klasse A benutzbar zu machen die auf einen teil des headers zugreift.
    in der main.cpp include ich sowohl den header weil die main auf den anderen teil zugreift als auch die klasse A.

    Ich habe include-guards drin aber bekomme die meldung mit multiple definitions...

    danke



  • Zeig uns mal minimalen Quellcode der das Problem immernoch erzeugt. Einfach drauflosraten macht den wenigsten hier Spaß 😉
    Vermutlich stößt du auch auf den Fehler, während du die Sache klein streichst 😉



  • ok danke - hier folgendes in pseudocode . bite nicht wundern warum ich
    in der xyz.hpp einfach nur eine funktion drin hab - das hat seinen grund!:

    #include "xyz.hpp"
    #include "classA.hpp"
    
    int main()
    {
    
    }
    
    //classA.hpp
    
    #include "xyz.hpp"
    

    er sagt multiple definitions of <einer funktion>. Also irgendwie funktioniert die header-einbindung nicht. warum denn? ich habe die include-guards überall drin. mein xyz.hpp sieht z.B. so aus:

    #ifndef IMPL_xyz_H
    #define IMPL_xyz_H
    
    void
    Init(int& n, int& m)
    {
        m = 1;
        n = 0;
    }
    
    #endif
    


  • gruppa schrieb:

    er sagt multiple definitions of <einer funktion>. Also irgendwie funktioniert die header-einbindung nicht.

    okay, hab ich mich wohl falsch ausgedrückt. Zeig uns bitte minimalen, aber compilefähigen Code, der immernoch den Fehler ergibt. Und teste das bitte selber auch nach, dass er den Fehler ergibt. Das was du gepostet hast kompiliert hier ohne Fehlermeldung. und <eine Funktion> seh ich in dem Code nicht. Du kannst uns den Namen ruhig erzählen, wir petzen nicht 😉



  • das ist sehr komisch. wenn ich die funktion im header nur deklariere und in einem zusätzlichen .cpp file definiere dann klappts. wenn ich sie definition aber im header angebe dann gehts nicht. wie kann das sein?

    das beispiel wäre riesig und sobald ich das selber als kleines definiere gehts nicht mehr. darf man funktionen nur im header deklarieren - eigentlich doch nicht oder?



  • wenn du funktionen im header definierst, dann ist sie in jedem object-file, das diesen header inkludiert hat, vorhanden, und sobald der Linker dann versucht, diese object-files zusammenzulinken, findet er die funktion mehrmals. Deshalb im header nur deklarieren, die definition aber in die .cpp packen.


Anmelden zum Antworten