Templates und undefined reference (gelöst)
-
Hi,
ich hab da ein kleines Problem mit Templates.Ich hab folgende Klassen:
die datei "array.h" template <typename T> class Array{ public: Array(); ~Array(); ... } die datei "nodearray.h" class NodeArray : public Array<Node> { public: NodeArray(); ~NodeArray(); ... }
jedes mal wenn ich das ganze linken will, kommt aber:
undefined reference to
Array<Node>::Array[not-in-charge]()' undefined reference to
Array<Node>::Array[in-charge]()'
undefined reference toArray<Node>::~Array [in-charge]()' undefined reference to
Array<Node>::~Array [not-in-charge]()'
undefined reference toArray<Node>::Array[in-charge]()' undefined reference to
Array<Node>::~Array [in-charge]()'
....hat jemand eine idee wieso?
danke
MasterM
-
Du hast wahrscheinlich entweder den Konstruktor und Destruktor nicht implementiert oder sie nicht-inline implementiert (ka, wie man das nennt). Probiers mal so:
die datei "array.h" template <typename T> class Array{ public: Array(){} ~Array(){} ... } die datei "nodearray.h" class NodeArray : public Array<Node> { public: NodeArray(); ~NodeArray(); ... }
-
also definiert hab ich sie.
Aber nicht inline.Muss ich jetzt jede Funktion der Array-Klasse in der Headerdatei definieren?
ich dachte sowas hier geht auch: (in der array.cpp)
template <typename T> Array<T>::Array() { m_FirstEntry = NULL; } template <typename T> Array<T>::~Array() { Clear(); }
Wenn ich jede Funktion in der Headerdatei definieren müsste, wäre das ziemlich unübersichtlich... gibts da keine Abhilfe?
Tschö mit ö
Manuel
-
Hi,
leider gibt es da AFAIK keine Möglichkeit.
-
MasterM schrieb:
Wenn ich jede Funktion in der Headerdatei definieren müsste, wäre das ziemlich unübersichtlich... gibts da keine Abhilfe?
Einfach in einer eigenen Datei definieren und dann diese datei in der header datei inkludieren.
ist nicht so fein wie ne echte trennung von schnittstelle und implementierung, aber wenisgstens ertraeglich