Verschachtelte Klassen in Visual C++ 2003 .Net

Warhawk

Lieutnant
Mitglied seit
27.11.2003
Beiträge
56
Renomée
0
Hallo,

ich hab hier mal ein kleines MS spezifisches Problem.
Ich soll für Studium ein Template für Ausgegliche Bäume programmieren, dabei musste ich nun feststellen das der MS 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 MS 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:

PHP:
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:
PHP:
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?

Danke schonmal im vorraus für die arbeit.

Warhawk
 
Versuche mal typename davor zu hängen:
PHP:
template<class VarT>
typename CBSearchTree<VarT>::CIterator CBSearchTree<VarT>::SearchNextR(VarT Value ,CKnoten* pKonten)
{
}
 
Nur als Anmerkung:
Es gibt keine Compiler, die 100%ig dem C++ Standard entsprechen, jedoch gelten die älteren sowohl von Borland als auch Microsoft als besonders schlechte Exemplare.

Falls also möglich, solltest du auf das Visual Studio 2005 wechseln, das einen sehr stark verbesserten und sehr standardkonformen Compiler bietet samt der bisher ausgereiftesten und umfangreichsten IDE. (natürlich nur meine eigene Meinung)
Das gibts es auch kostenfrei als Express Version zum Runterladen.
 
Hallo,

vielen danke schonmal für die Antwort, mit dem typename funktioniert es einwandfrei.
danke :)

Mit dem Compiler ist sowieso son ne sache, der Fehler trat auch beim MS VS 2005 auf und die ausgeben Fehler waren auch die gleichen.
 
Zuletzt bearbeitet:
Hallo,

vielen danke schonmal für die Antwort, mit dem typename funktioniert es einwandfrei.
danke :)

Mit dem Compiler ist sowieso son ne sache, der Fehler trat auch beim MS VS 2005 auf und die ausgeben Fehler waren auch die gleichen.
Das ist kein Fehler, es ist ein Fehler, wenn es ohne typename funktioniert, genau dafür sind eben Standards da, dass C++ identisch ist, egal auf welchem Compiler man gerade arbeitet ;) .
 
Zurück
Oben Unten