Verschachtelte Klassen unter Visual C++ 2003 .Net
-
Hallo,
ich hab hier mal ein kleines M$ spezifisches Problem.
Ich soll für Studium ein Template für Ausgegliche Bäume programmieren, dabei musste ich nun feststellen das der M$ Compiler anscheinend ein problem mit verschachtelten Klassen hat.
Sobald ich eine der in CBSearchTree verschachelten Klassen als Rückgabewert einer Funktion hab fängt der M$ Compiler an zu spinnen.Ich habs nachdem ich den fehler nicht finden konnt mal unter Borland das template compiliert und geht es einwandfrei.
Hier dann erstmal mein Klassendefinition:
template<class VarT> class CBSearchTree { private: class CKnoten; public: CBSearchTree<VarT>(); //Standdradkonstruktor CBSearchTree<VarT>(CBSearchTree<VarT>* oldTree); //Kopierkonstruktor void Merge(CBSearchTree<VarT>* addTree); //Zusammenfügen von 2 Bäumen virtual void InsertEle(VarT newEle) = 0; //fügt neues Element in Baum ein virtual bool DeleteEle(VarT delEle) = 0; //Löscht ein Element, Rückgabe des gelöschten Elements bool IsElement(VarT Ele); //prüf ob ein Element schon enthalten ist VarT GetNextSmaller(VarT Ele); //Gibt das nächst kleinere Element zurück VarT GetNextHigher(VarT Ele); //Gibt das nächst größere Element zurück int GetCount(); //Zählt die im Baum enthaltenen Elemente bool IsEmpty(); //prüft ob der Baum leer ist, wenn leer dann wird "true" zurückgeben ~CBSearchTree<VarT>(); class CIterator { friend class CBSearchTree<VarT>; private: CKnoten* m_pPointer; unsigned short m_iModus; void SetAdress(CKnoten* pPointer); public: CIterator(unsigned short iModus=MD_IN_ORD); void SelModus(unsigned short iModus); void SelNext(); void SelPrev(); void SelFirst(CBSearchTree<VarT>* pParentClass); void SelLast(CBSearchTree<VarT>* pParentClass); VarT GetSelEle(); bool IsValidate(); }; class CExceptionWrongModus { friend class CBSearchTree<VarT>; private: unsigned short m_iModus; public: CExceptionWrongModus(unsigned short iModus); unsigned short GetModus(); }; private: class CKnoten { friend class CBSearchTree<VarT>; public: CKnoten(VarT Value); private: CKnoten* m_pRight; //Adresse des rechter Kind-Knoten CKnoten* m_pLeft; //Adresse des linker Kind-Knoten CKnoten* m_pParent; VarT m_Value; }; CKnoten* m_pWurzel; //Enthält die Adresse der Wurzel des Knotens int m_iAnzahl; CIterator SearchR(VarT Value,CKnoten* pKonten); CIterator SearchNextR(VarT Value,CKnoten* pKonten); };so und hier der besagte Funktionsrumpf:
template<class VarT> CBSearchTree<VarT>::CIterator CBSearchTree<VarT>::SearchNextR(VarT Value ,CKnoten* pKonten) { }Weis vielleicht jemand woran es liegen könnte oder wie man es unter Visual C++ schreiben muss?
Das kompische ist auch das wenn ich den Funktionsrumpf in die klassendefinition verschieb es auch unter M$ geht, aber da macht mich dann der Prof nen kopf kürzer.Danke schonmal im vorraus für die arbeit.
Warhawk
-
Es muss korrekt:
template<class VarT> typename CBSearchTree<VarT>::CIterator CBSearchTree<VarT>::SearchNextR(VarT Value ,CKnoten* pKonten) { }heißen! :xmas2: