<?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[Klassentemplate, Member ein anderer Typ]]></title><description><![CDATA[<p>Sorry für die unklare Überschrift, aber ich wusste echt nicht, wie ich es ausdrücken soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich versuch mich grad interessehalber an etwas &quot;baumähnlichen&quot;, bin aber erst dabei, die einzelnen Knoten zu programmieren.<br />
Hab mir dabei eine klasse &quot;Node&quot; erstellt und bei der Gelegenheit wollte ich mich gleich in die Template-Programmierung einarbeiten.</p>
<p>grobe Überlegung: ein Knoten beinhaltet den Typ <code>int</code> und hat natürlich drei Zeiger auf andere Knoten (parent, lhs, rhs), die aber nicht zwingend auch den selben Typ haben, sondern bspw. einen float, string oder andere benutzerdefinierte Klassen.</p>
<p>die Definition sieht bisher so aus (Ausschnitt):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Node
{
public:
	Node( T e );
	~Node();

	void setData( const T&amp; theValue );
	T data() const;
	template&lt;typename U&gt; void setLeft( const Node&lt;U&gt;&amp; theValue );
private:
	Node* m_left;
	Node* m_right;
	Node* m_parent;
	T m_data;

};

#include &quot;node.hpp&quot;
</code></pre>
<p>bzw. entsprechend die impl:</p>
<pre><code class="language-cpp">template&lt;typename T&gt; Node&lt;T&gt;::Node( T e )
: m_left( 0 ),
m_right( 0 ),
m_parent( 0 ),
m_data( e )
{
}

template&lt;typename T&gt; Node&lt;T&gt;::~ Node()
{
}

template&lt;typename T&gt; T Node&lt;T&gt;::data() const
{
	return m_data;
}

template&lt;typename T&gt; void Node&lt;T&gt;::setData( const T&amp; theValue )
{
	m_data = theValue;
}

template&lt;typename T&gt; template&lt;typename U&gt; void Node&lt;T&gt;::setLeft( const Node&lt;U&gt;&amp; theValue )
{
	m_left = theValue;
}
</code></pre>
<p>ich kann mir bereits denken, dass dieser Ansatz falsch ist, aber ich hab bisher nirgends den entscheidenden Tipp gefunden, wie man es richtig macht...<br />
Der Compiler meldet folgendes in Zeile 25 im unteren Codeausschnitt:</p>
<pre><code>error: cannot convert 'const Node&lt;int&gt;*' to 'Node&lt;float&gt;*' in assignment
</code></pre>
<p>für einen Schubs in die richtige Richtung wär ich dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/205554/klassentemplate-member-ein-anderer-typ</link><generator>RSS for Node</generator><lastBuildDate>Fri, 09 Oct 2026 03:47:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/205554.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 15 Feb 2008 14:12:17 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klassentemplate, Member ein anderer Typ on Fri, 15 Feb 2008 14:12:17 GMT]]></title><description><![CDATA[<p>Sorry für die unklare Überschrift, aber ich wusste echt nicht, wie ich es ausdrücken soll <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Ich versuch mich grad interessehalber an etwas &quot;baumähnlichen&quot;, bin aber erst dabei, die einzelnen Knoten zu programmieren.<br />
Hab mir dabei eine klasse &quot;Node&quot; erstellt und bei der Gelegenheit wollte ich mich gleich in die Template-Programmierung einarbeiten.</p>
<p>grobe Überlegung: ein Knoten beinhaltet den Typ <code>int</code> und hat natürlich drei Zeiger auf andere Knoten (parent, lhs, rhs), die aber nicht zwingend auch den selben Typ haben, sondern bspw. einen float, string oder andere benutzerdefinierte Klassen.</p>
<p>die Definition sieht bisher so aus (Ausschnitt):</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
class Node
{
public:
	Node( T e );
	~Node();

	void setData( const T&amp; theValue );
	T data() const;
	template&lt;typename U&gt; void setLeft( const Node&lt;U&gt;&amp; theValue );
private:
	Node* m_left;
	Node* m_right;
	Node* m_parent;
	T m_data;

};

#include &quot;node.hpp&quot;
</code></pre>
<p>bzw. entsprechend die impl:</p>
<pre><code class="language-cpp">template&lt;typename T&gt; Node&lt;T&gt;::Node( T e )
: m_left( 0 ),
m_right( 0 ),
m_parent( 0 ),
m_data( e )
{
}

template&lt;typename T&gt; Node&lt;T&gt;::~ Node()
{
}

template&lt;typename T&gt; T Node&lt;T&gt;::data() const
{
	return m_data;
}

template&lt;typename T&gt; void Node&lt;T&gt;::setData( const T&amp; theValue )
{
	m_data = theValue;
}

template&lt;typename T&gt; template&lt;typename U&gt; void Node&lt;T&gt;::setLeft( const Node&lt;U&gt;&amp; theValue )
{
	m_left = theValue;
}
</code></pre>
<p>ich kann mir bereits denken, dass dieser Ansatz falsch ist, aber ich hab bisher nirgends den entscheidenden Tipp gefunden, wie man es richtig macht...<br />
Der Compiler meldet folgendes in Zeile 25 im unteren Codeausschnitt:</p>
<pre><code>error: cannot convert 'const Node&lt;int&gt;*' to 'Node&lt;float&gt;*' in assignment
</code></pre>
<p>für einen Schubs in die richtige Richtung wär ich dankbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456548</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456548</guid><dc:creator><![CDATA[zwutz]]></dc:creator><pubDate>Fri, 15 Feb 2008 14:12:17 GMT</pubDate></item><item><title><![CDATA[Reply to Klassentemplate, Member ein anderer Typ on Fri, 15 Feb 2008 15:35:28 GMT]]></title><description><![CDATA[<blockquote>
<p>aber nicht zwingend auch den selben Typ haben</p>
</blockquote>
<pre><code class="language-cpp">struct base_node
{
    base_node* left;
    base_node* right;
    base_node* parent;

    base_node()
        : left(NULL), right(NULL), parent(NULL)
    {}
};

template&lt;typename Type&gt;
class basic_node : public base_node
{
    typedef Type value_type;

    value_type m_data;

public:
    basic_node(value_type const&amp; value)
        : m_data(value) 
    {}

public:
    void set(value_type const&amp; value)
    { m_data = value; }
    value_type const&amp; get() const { return m_data; }
};

typedef basic_node&lt;int&gt; int_node;
typedef basic_node&lt;bool&gt; bool_node;
</code></pre>
<p>so ... dann einfach base_node als root nehmen ... evtl. noch wie unten gezeigt typdef für int_node, bool_node usw. einfügen und fertig <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1456596</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1456596</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Fri, 15 Feb 2008 15:35:28 GMT</pubDate></item></channel></rss>