undefined reference bei Verwendung einer Template-Klasse



  • Hi,

    ich habe gerade meine erste Template-Klasse geschrieben (Juhu!) aber noch ein kleiner Problem:

    #ifndef X_H
    #define X_H
    
    template <class T> class X;
    
    ...
    
    using namespace std;
    
    template <class T> 
    class X {
        ...
        void     print() const;
        ...
       };
    

    Und im .cpp-file:

    #include <fstream>
    #include "X.h"
    
    // I/O-Methods
    template<class T> void X<T>::print() const {
        ...
        }
    

    Soweit, sogut! Wenn ich jetzt mit meinem g++ 3.2 unter Suse 8.1 übersetze, kommt folgende Fehlermeldung:

    main.o: In function Test()': main.o(.text+0x113): undefined reference toX<double>::print() const'
    collect2: ld returned 1 exit status
    make: *** [main] Fehler 1

    Anderer Versuch: Den ganzen Mist statt ins .cpp-file ins .h-file klatschen:

    #ifndef X_H
    #define X_H
    
    template <class T> class X;
    
    ...
    
    using namespace std;
    
    template <class T> 
    class X {
        ...
        void     print() const {
            // hier stehen die Anweisungen von print drin
            }
        ...
       };
    

    und schon läufts. Als wissbegieriger Mensch würde ich jetzt aber gern wissen: Wieso klappt es jetzt 😕 ? Und was muss ich machen damit Variante 1 auch funktioniert?

    Vielen Dank, LIBS



  • Als wissbegieriger Mensch sollte man zuerst in die FAQ schauen:
    http://www.c-plusplus.net/forum/viewtopic.php?t=39467



  • Oh, dankeschön ... habe diesmal glatt vergessen in die FAQ zu schauen! 😞

    MfG LIBS


Anmelden zum Antworten