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


  • Mod

    Es muss korrekt:

    template<class VarT>
    typename CBSearchTree<VarT>::CIterator CBSearchTree<VarT>::SearchNextR(VarT Value ,CKnoten* pKonten)
    {
    }
    

    heißen! :xmas2:


Anmelden zum Antworten