Linker behauptet Methode nicht definiert :-/



  • Ich verwende in einer Header-Datei einen Typ, normalerweise wird der auch in der Header-Datei definiert, aber auf Wunsch kann das auch vom User übernommen werden, so in etwa:

    // Header
    #ifndef DEF_OWN_TYPE
        typedef int type;
    #else
        typedef ::type type;
    #endif
    
        class blubb
        {
            void method (type var);
        };
    
    // Cpp
    void blubb::method (type var)
    {
        do_sth(var);
    }
    

    Das geht aber nur solange gut, solange der interne Typ verwendet wird. Sobald:

    // Main
    #define DEF_OWN_TYPE
    enum type
    {
        const1,
        const2
    };
    #include "header.h"
    
    ...
    
    blubb test;
    test.method(const1);
    

    eingesetzt wird bekomme ich einen Linkerfeher. Der Linker behauptet, die Methode method(type var) wäre nirgends definiert. Warum?

    MfG SideWinder



  • Zum Übersetzungszeitpunkt von

    void blubb::method (type var)
    {
        do_sth(var);
    }
    

    ist ja der eigentliche gewünschte Typ ja gar nicht bekannt.

    Du hast doch 2 Compile Vorgänge:
    blubb.cpp (inkludiert blubb.h mit irgendeinem Typ)
    main.cpp (inkludiert blubb.h definiert aber den Typ anders)

    In blubb.o ist die von main.cpp geforderte Methode nicht vorhanden.



  • Gibts dafür irgendwie Abhilfe?

    MfG SideWinder



  • So wie Du es versuchst, wird es nicht gehen. Du musst in jedem Fall beim Übersetzen von blubb.o bereits den richtigen Typ kennen.
    Eine Möglichkeit wäre es den "benutzerdefinierten Typ" in einer andere Include-Datei (vom Nutzer veränderbare Datei) zu packen, die von dem Header blubb.h inkludiert wird.

    Aber warum benutzt Du keine Templates?



  • Weil das nicht gerade als Template-Parameter passt, werde mir einfach eine andere Methode überlegen das Anzugehen. Im Notfall halt auch mit Template.

    Danke auf jeden Fall.

    MfG SideWinder


Anmelden zum Antworten