<?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[Problem - Ableitung von Template, Überladung von Memberfunktion]]></title><description><![CDATA[<p>Hallo,</p>
<p>kurz und knapp:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Base{
	protected:
		T insert(int loc, T val){
			return val;
		}

		T base_insert(int loc, T val){
			return val;
		}
};

template &lt;typename T&gt;
class Derived : public Base&lt;T&gt;{
	public:
		class I;

		T insert(I i, T val){
			return this-&gt;insert(i.i, val); // geht nicht
			return this-&gt;base_insert(i.i, val); // geht
			return Base&lt;T&gt;::insert(i.i, val); // geht
		}
};

template &lt;typename T&gt;
class Derived&lt;T&gt;::I{
	public:
		int i;
};

int main(int argc, char *argv[]){
	Derived&lt;int&gt; d1;
	Derived&lt;int&gt;::I i1;

	int x1 = d1.insert(i1, 1);
}
</code></pre>
<p>Warum zur Hölle findet der Compiler das insert(int, T) der Basisklasse nicht von selbst?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/240328/problem-ableitung-von-template-überladung-von-memberfunktion</link><generator>RSS for Node</generator><lastBuildDate>Tue, 22 Sep 2026 00:44:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/240328.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 May 2009 13:16:04 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 13:16:28 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kurz und knapp:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Base{
	protected:
		T insert(int loc, T val){
			return val;
		}

		T base_insert(int loc, T val){
			return val;
		}
};

template &lt;typename T&gt;
class Derived : public Base&lt;T&gt;{
	public:
		class I;

		T insert(I i, T val){
			return this-&gt;insert(i.i, val); // geht nicht
			return this-&gt;base_insert(i.i, val); // geht
			return Base&lt;T&gt;::insert(i.i, val); // geht
		}
};

template &lt;typename T&gt;
class Derived&lt;T&gt;::I{
	public:
		int i;
};

int main(int argc, char *argv[]){
	Derived&lt;int&gt; d1;
	Derived&lt;int&gt;::I i1;

	int x1 = d1.insert(i1, 1);
}
</code></pre>
<p>Warum zur Hölle findet der Compiler das insert(int, T) der Basisklasse nicht von selbst?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705875</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705875</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Tue, 05 May 2009 13:16:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 13:20:12 GMT]]></title><description><![CDATA[<p>maximAL schrieb:</p>
<blockquote>
<p>Warum zur Hölle findet der Compiler das insert(int, T) der Basisklasse nicht von selbst?</p>
</blockquote>
<p>vermutlich weils vom insert(int,T) der abgeleiteten klasse verdeckt wird, denn T=int bei deinem test.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705879</guid><dc:creator><![CDATA[volkard]]></dc:creator><pubDate>Tue, 05 May 2009 13:20:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 13:22:53 GMT]]></title><description><![CDATA[<p>maximAL schrieb:</p>
<blockquote>
<p>Warum zur Hölle findet der Compiler das insert(int, T) der Basisklasse nicht von selbst?</p>
</blockquote>
<p>Weil du bereits ein neues insert in der abgeleiteten Klasse deklariert hast und das ganze ein abhängiger Aufruf ist. Schau dich mal im Netz nach templates und depentdant name lookup um.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705882</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705882</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 May 2009 13:22:53 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 13:25:43 GMT]]></title><description><![CDATA[<p>volkard schrieb:</p>
<blockquote>
<p>maximAL schrieb:</p>
<blockquote>
<p>Warum zur Hölle findet der Compiler das insert(int, T) der Basisklasse nicht von selbst?</p>
</blockquote>
<p>vermutlich weils vom insert(int,T) der abgeleiteten klasse verdeckt wird, denn T=int bei deinem test.</p>
</blockquote>
<p>Die abgeleitete Klasse hat aber kein insert(int, T), sondern insert(I, T), deshalb wundert mich ja das Problem.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705887</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Tue, 05 May 2009 13:25:43 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 13:53:26 GMT]]></title><description><![CDATA[<p>maximAL schrieb:</p>
<blockquote>
<p>Die abgeleitete Klasse hat aber kein insert(int, T), sondern insert(I, T), deshalb wundert mich ja das Problem.</p>
</blockquote>
<p>Überladung funktioniert nur im gleichen Scope. Die abgeleitete Klasse hat einen anderen Scope als die Basisklasse, daher gibt es keine Überladung sondern eine Überdeckung.</p>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705914</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705914</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 05 May 2009 13:53:26 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 14:43:29 GMT]]></title><description><![CDATA[<p>OK, danke, auch wenn die Sache wiedermal sehr unbefriedigend ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705942</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705942</guid><dc:creator><![CDATA[maximAL]]></dc:creator><pubDate>Tue, 05 May 2009 14:43:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem - Ableitung von Template, Überladung von Memberfunktion on Tue, 05 May 2009 15:54:47 GMT]]></title><description><![CDATA[<p>maximAL schrieb:</p>
<blockquote>
<p>OK, danke, auch wenn die Sache wiedermal sehr unbefriedigend ist <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
</blockquote>
<p>Vielleicht gibt es dir Befriedigung, wenn ich dir sage, dass du eine Funktion in einen Scope reinziehen kannst, über die using Anweisung. Schreib deine Derived Klasse folgendermassen um:</p>
<pre><code class="language-cpp">template &lt;typename T&gt;
class Derived : public Base&lt;T&gt;{
    public:
        class I;

        using Base&lt;T&gt;::insert;
        // Dies zieht alle Funktionen mit dem Namen insert
        // aus Base&lt;T&gt; in diesen Scope rein. Die Überladung
        // sollte dann funktionieren.

        T insert(I i, T val){
            return this-&gt;insert(i.i, val); // geht nicht
            return this-&gt;base_insert(i.i, val); // geht
            return Base&lt;T&gt;::insert(i.i, val); // geht
        }
};
</code></pre>
<p>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1705981</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1705981</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Tue, 05 May 2009 15:54:47 GMT</pubDate></item></channel></rss>