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();