<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0"><channel><title><![CDATA[Verschachtelte Klassen unter Visual C++ 2003 .Net]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab hier mal ein kleines M$ spezifisches Problem.<br />
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.<br />
Sobald ich eine der in CBSearchTree verschachelten Klassen als Rückgabewert einer Funktion hab fängt der M$ Compiler an zu spinnen.</p>
<p>Ich habs nachdem ich den fehler nicht finden konnt mal unter Borland das template compiliert und geht es einwandfrei.</p>
<p>Hier dann erstmal mein Klassendefinition:</p>
<pre><code class="language-cpp">template&lt;class VarT&gt;
class CBSearchTree
{
private:
    class CKnoten;
public:
    CBSearchTree&lt;VarT&gt;();                         //Standdradkonstruktor
    CBSearchTree&lt;VarT&gt;(CBSearchTree&lt;VarT&gt;* oldTree);    //Kopierkonstruktor
    void Merge(CBSearchTree&lt;VarT&gt;* 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 &quot;true&quot; zurückgeben
    ~CBSearchTree&lt;VarT&gt;();

    class CIterator
    {
		friend class CBSearchTree&lt;VarT&gt;;
        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&lt;VarT&gt;* pParentClass);
        void SelLast(CBSearchTree&lt;VarT&gt;* pParentClass);
        VarT GetSelEle();
	bool IsValidate();

    };

	class CExceptionWrongModus
	{
		friend class CBSearchTree&lt;VarT&gt;;
	private:
		unsigned short m_iModus;

	public:
        CExceptionWrongModus(unsigned short iModus);
		unsigned short GetModus();
	};

private:
    class CKnoten
    {
        friend class CBSearchTree&lt;VarT&gt;;
        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);
};
</code></pre>
<p>so und hier der besagte Funktionsrumpf:</p>
<pre><code class="language-cpp">template&lt;class VarT&gt;
CBSearchTree&lt;VarT&gt;::CIterator CBSearchTree&lt;VarT&gt;::SearchNextR(VarT Value ,CKnoten* pKonten)
{
}
</code></pre>
<p>Weis vielleicht jemand woran es liegen könnte oder wie man es unter Visual C++ schreiben muss?<br />
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.</p>
<p>Danke schonmal im vorraus für die arbeit.</p>
<p>Warhawk</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/168839/verschachtelte-klassen-unter-visual-c-2003-net</link><generator>RSS for Node</generator><lastBuildDate>Wed, 29 Apr 2026 03:37:14 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/168839.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 28 Dec 2006 13:39:45 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Verschachtelte Klassen unter Visual C++ 2003 .Net on Thu, 28 Dec 2006 13:42:55 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich hab hier mal ein kleines M$ spezifisches Problem.<br />
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.<br />
Sobald ich eine der in CBSearchTree verschachelten Klassen als Rückgabewert einer Funktion hab fängt der M$ Compiler an zu spinnen.</p>
<p>Ich habs nachdem ich den fehler nicht finden konnt mal unter Borland das template compiliert und geht es einwandfrei.</p>
<p>Hier dann erstmal mein Klassendefinition:</p>
<pre><code class="language-cpp">template&lt;class VarT&gt;
class CBSearchTree
{
private:
    class CKnoten;
public:
    CBSearchTree&lt;VarT&gt;();                         //Standdradkonstruktor
    CBSearchTree&lt;VarT&gt;(CBSearchTree&lt;VarT&gt;* oldTree);    //Kopierkonstruktor
    void Merge(CBSearchTree&lt;VarT&gt;* 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 &quot;true&quot; zurückgeben
    ~CBSearchTree&lt;VarT&gt;();

    class CIterator
    {
		friend class CBSearchTree&lt;VarT&gt;;
        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&lt;VarT&gt;* pParentClass);
        void SelLast(CBSearchTree&lt;VarT&gt;* pParentClass);
        VarT GetSelEle();
	bool IsValidate();

    };

	class CExceptionWrongModus
	{
		friend class CBSearchTree&lt;VarT&gt;;
	private:
		unsigned short m_iModus;

	public:
        CExceptionWrongModus(unsigned short iModus);
		unsigned short GetModus();
	};

private:
    class CKnoten
    {
        friend class CBSearchTree&lt;VarT&gt;;
        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);
};
</code></pre>
<p>so und hier der besagte Funktionsrumpf:</p>
<pre><code class="language-cpp">template&lt;class VarT&gt;
CBSearchTree&lt;VarT&gt;::CIterator CBSearchTree&lt;VarT&gt;::SearchNextR(VarT Value ,CKnoten* pKonten)
{
}
</code></pre>
<p>Weis vielleicht jemand woran es liegen könnte oder wie man es unter Visual C++ schreiben muss?<br />
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.</p>
<p>Danke schonmal im vorraus für die arbeit.</p>
<p>Warhawk</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199012</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199012</guid><dc:creator><![CDATA[Warhawk]]></dc:creator><pubDate>Thu, 28 Dec 2006 13:42:55 GMT</pubDate></item><item><title><![CDATA[Reply to Verschachtelte Klassen unter Visual C++ 2003 .Net on Thu, 28 Dec 2006 16:47:12 GMT]]></title><description><![CDATA[<p>Es muss korrekt:</p>
<pre><code class="language-cpp">template&lt;class VarT&gt;
typename CBSearchTree&lt;VarT&gt;::CIterator CBSearchTree&lt;VarT&gt;::SearchNextR(VarT Value ,CKnoten* pKonten)
{
}
</code></pre>
<p>heißen! :xmas2:</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1199074</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1199074</guid><dc:creator><![CDATA[Martin Richter]]></dc:creator><pubDate>Thu, 28 Dec 2006 16:47:12 GMT</pubDate></item></channel></rss>