Probleme mit Templateklassen-Konstruktor
-
Hallo...
ich steh grad auf dem Schlauch. Wieso krieg ich hierbei ...
template <typename T> class GenericTimelineTransitionEvent : public TimelineEvent { public: GenericTimelineTransitionEvent(unsigned long start, unsigned long end); virtual ~GenericTimelineTransitionEvent(); virtual void onUpdate(unsigned long time); protected: private: T m_maxValue; T m_minValue; };template <typename T> GenericTimelineTransitionEvent<T>::~GenericTimelineTransitionEvent() { } template <typename T> GenericTimelineTransitionEvent<T>::GenericTimelineTransitionEvent(unsigned long start, unsigned long end) { }... folgenden Error beim Linken:
obj\win32debug\main.o||In function `main':| I:\prj\SGF\main.cpp|15|undefined reference to `SGF::GenericTimelineTransitionEvent<char>::GenericTimelineTransitionEvent(unsigned long, unsigned long)'| I:\prj\SGF\main.cpp|28|undefined reference to `SGF::GenericTimelineTransitionEvent<char>::~GenericTimelineTransitionEvent()'| I:\prj\SGF\main.cpp|28|undefined reference to `SGF::GenericTimelineTransitionEvent<char>::~GenericTimelineTransitionEvent()'| ||=== Build finished: 3 errors, 0 warnings ===|Der Compiler, um den es geht, ist MinGW/GCC.
-
Der zweite Teil befindet sich aber nicht in einer .cpp, oder? - Das geht nämlich nicht. (zumindest nicht ohne export, was aber nur wenige Compiler wirklich unterstützen). Du musst das in den Header packen.
-
Natürlich... Ich bin ein Idiot ^^
Danke für die Hilfe

-
Geht auch ohne export.
z.B. indem man die CPP-Datei unten in der Headerdatei includiert afaik. bin mir aber nich sicher.Oder du erstellst Instanziierungen der Templates in einer separaten Datei, um code bloats zu verhindern
#include <diecppdatei.cpp> template class Template<eintyp>;was von Vorteil ist, wenn du das Template in mehreren Dateien nutzt.
Ich mach hab mir das so angewoehnt - auch wenns umstaendlich ist...Gruss
Cartman
-
Klar kann man auch in der Header Datei ein anderes File includen, dann musst du aber darauf achten, dass dieses nicht gelinkt wird. (also nicht .cpp nennen). Ist schlussendlich aber auch im Header drin.
