Kleines Template Problem



  • Hi,

    ich habe eine kleine Template-Klasse geschrieben, die auch wunderbar läuft, so lange die Funktionen in der Header Datei zusammen mit der Klassendefinition stehen. Sobald ich die Funktionen in die ansonsten gleichnamige .cpp datei schreibe und den Header dort einbinde, wirft der Compiler beim Aufruf der Funktionen "undefined reference" aus.
    Könnt ihr mir sagen worans liegt?

    Hier mal der Code:

    Header:

    #ifndef MITTELWERT_H_INCLUDED
    #define MITTELWERT_H_INCLUDED
    
    #include <vector>
    
    template <class T>
    class Mittelwert {
        public:
        void AddValue(T val);
        float Calc();
    
        private:
        std::vector<T> Werte;
    };
    
    #endif // MITTELWERT_H_INCLUDED
    

    Code:

    #include "Mittelwert.h"
    #include <vector>
    
    template <class T>
    float Mittelwert<T>::Calc() {
        float sum = 0;
        for(int i = 0; i<Werte.size(); i++, sum+=Werte[i]);
        return sum/Werte.size();
    }
    
    template <class T>
    void Mittelwert<T>::AddValue(T val) {
        Werte.push_back(val);
    }
    

    Falls das eine Rolle spielt: Ich benutze Code::Blocks mit gcc



  • PsychoticStyx schrieb:

    ich habe eine kleine Template-Klasse geschrieben [...]

    Das ist ein Klassentemplate. Eine Klasse wird es erst, wenn das Template instanziiert wird (für alle Templateparameter werden Typen oder Werte eingesetzt).

    PsychoticStyx schrieb:

    [...] die auch wunderbar läuft, so lange die Funktionen in der Header Datei zusammen mit der Klassendefinition stehen. Sobald ich die Funktionen in die ansonsten gleichnamige .cpp datei schreibe und den Header dort einbinde, wirft der Compiler beim Aufruf der Funktionen "undefined reference" aus.

    Templates müssen vollständig im Header definiert werden. Dazu steht ein Beitrag in den FAQ.



  • Danke! Hab das bei der Forumssuche irgendwie vorher nicht gefunden gehabt.


Anmelden zum Antworten