Klassentemplates: Instanziierung statischer Member



  • Hallo allerseits,

    ich habe ein kleines Problem mit folgendem Code, welcher Teil eines Projektes von mir ist:

    #ifndef TOKEN_HPP_
    #define TOKEN_HPP_
    
    #include "Dictionary.hpp"
    
    template <typename T>
    class Token
    {
        public:
    
            typedef Dictionary<T> DicType;
    
            static DicType dictionary;
    
            Token()
            {}
    
            virtual ~Token()
            {}
    
            virtual T operator() () = 0;
    };
    
    /*  ... */
    
    //Der Typ Token<T>::DicType besitzt einen öffentlichen def. Konstruktor 
    //ohne Argumente
    template<typename T>
    typename Token<T>::DicType Token<T>::dictionary;
    
    //linker meldet "undefined reference to Token<double>::dictionary" !!
    template<>
    Token<double>::DicType Token<double>::dictionary;
    
    #endif /*TOKEN_HPP_*/
    

    Wenn man die beiden Zeilen, welche den Linker Fehler erzeugen, löscht, wird der Code anstandslos kompiliert (gcc 3.4.5 amd64). Ich benötige aber dringend ein Exemplar von Token<T>::DicType für den Typ double. Kann mir einer von euch sagen, was ich hierbei falsch mache?



  • Ok, ich habe selbst herausfinden können, woran es lag.

    template<>
    Token<double>::DicType Token<double>::dictionary;
    

    ist an sich noch keine Definition von Token<double>::dictionary,
    daher muss explizit eine Initialisierung erfolgen:

    template<>
    Token<double>::DicType Token<double>::dictionary = Token<double>::DicType();
    

Anmelden zum Antworten