Template-Fehler
-
Hallo zusammen,
ich hab ein kleines Problem mit einem template-Projekt für Bäume und werd aus den Fehlermeldungen nicht schlau.Im folgenden Code stellt GNode einen Baumknoten dar, mit AddChild soll wie der Name schon sagt ein Kindknoten in die Liste der children (vom Typ NodeCon = vector) eingefügt werden.
Der Fehler tritt bei der Defintion von AddChild auf:
error C2039: 'const_iterator' : is not a member of 'NodeCon<class GNode<T> *>'dabei sind doch alle Typen in den abgeleiteten Klassen verfügbar?!
Hier der fehlerhafte Code:
template <class T> class NodeCon : public vector<T> {}; template <class T> class GMultiTree; template <class T> class GNode { friend class GMultiTree<T>; protected: GNode(const GObject<T>&, bool copy = false); ~GNode(); public: /* ... */ void AddChild(const GObject<T>&, NodeCon<GNode<T>*>::const_iterator, bool copy = false); // inserts before iterator protected: GObject<T>* object; NodeCon<GNode<T>*> children; }; /* ... */ template <class T> void GNode<T>::AddChild(const GObject<T>& obj, NodeCon<GNode<T>*>::const_iterator it, bool copy /* = false*/) { }
-
NodeCon<GNode<T>*>::const_iterator
Das ist ein abhängiger Name (abhängig vom Templateparameter T). Wenn du willst, dass const_iterator als Typname interpretiert werden soll, musst du das ganze mit "typename" qualifizieren.
void AddChild(const GObject<T>&, typename NodeCon<GNode<T>*>::const_iterator, bool copy = false);
Ein paar Zeilen später natürlich auch nochmal.