<?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 mit Templates - oder Compiler]]></title><description><![CDATA[<p>Hi,<br />
ich versuche gerade einen AVL-Baum zu schreiben. Da ich bisher noch nie mit templates gearbeitet habe, war dies für mich die erste Möglichkeit diese Art von Programmierung kennenzulernen.</p>
<pre><code class="language-cpp">template &lt;class Temp, class Comp&gt;
typename AVLBaum&lt;Temp, Comp&gt;::AVLNode* AVLBaum&lt;Temp, Comp&gt;::AVL_Maximumsuche(const AVLNode* const Knoten)
{
	const int Wert = 4;
	Wert = 5;

	if(!Knoten) return NULL;
	while(Knoten-&gt;rc)
		Knoten = Knoten-&gt;rc;
	return Knoten;
}
</code></pre>
<p>Normalerweise dürfte doch so ein Code wegen der Verletzung der Konstantheit niemals kompiliert werden. Allerdings nimmt mein Compiler das klaglos an. Woran liegt das? - Liegt das an den Templates, dass das erst geprüft wird, wenn sie direkt für einen Datentyp initialisiert werden? Ich hab schon eine Instanz des AVL-Baums für Integer Variablen erstellt (ohne Methoden aufzurufen), der Compiler meckert aber immer noch nicht.</p>
<p>Was muss ich ändern, damit der Compiler endlich wieder diese Fehler erkennt? (Benutze VC++ 2008 - hab auch schon ein neues Testprojekt ohne Templates erstellt, in dem hat der Compiler endlich gemeckert)</p>
<p>Vielen Dank für eine Antwort</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/250534/problem-mit-templates-oder-compiler</link><generator>RSS for Node</generator><lastBuildDate>Tue, 15 Sep 2026 23:42:40 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/250534.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 19 Sep 2009 16:38:29 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 16:38:29 GMT]]></title><description><![CDATA[<p>Hi,<br />
ich versuche gerade einen AVL-Baum zu schreiben. Da ich bisher noch nie mit templates gearbeitet habe, war dies für mich die erste Möglichkeit diese Art von Programmierung kennenzulernen.</p>
<pre><code class="language-cpp">template &lt;class Temp, class Comp&gt;
typename AVLBaum&lt;Temp, Comp&gt;::AVLNode* AVLBaum&lt;Temp, Comp&gt;::AVL_Maximumsuche(const AVLNode* const Knoten)
{
	const int Wert = 4;
	Wert = 5;

	if(!Knoten) return NULL;
	while(Knoten-&gt;rc)
		Knoten = Knoten-&gt;rc;
	return Knoten;
}
</code></pre>
<p>Normalerweise dürfte doch so ein Code wegen der Verletzung der Konstantheit niemals kompiliert werden. Allerdings nimmt mein Compiler das klaglos an. Woran liegt das? - Liegt das an den Templates, dass das erst geprüft wird, wenn sie direkt für einen Datentyp initialisiert werden? Ich hab schon eine Instanz des AVL-Baums für Integer Variablen erstellt (ohne Methoden aufzurufen), der Compiler meckert aber immer noch nicht.</p>
<p>Was muss ich ändern, damit der Compiler endlich wieder diese Fehler erkennt? (Benutze VC++ 2008 - hab auch schon ein neues Testprojekt ohne Templates erstellt, in dem hat der Compiler endlich gemeckert)</p>
<p>Vielen Dank für eine Antwort</p>
<p>Andreas</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781487</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Sat, 19 Sep 2009 16:38:29 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 16:44:42 GMT]]></title><description><![CDATA[<p>&quot;Was muss ich ändern, damit der Compiler endlich wieder diese Fehler erkennt?&quot;<br />
Template Klassen werden erst bei der Nutzung kompiliert,<br />
Das gleiche gilt auch für Template Funktionen - die werden nur auf synthax geprüft, aber richtig geparst werden sie nur, wenn sie gebraucht werden - also ruf mal diese fkt auf</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781491</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 19 Sep 2009 16:44:42 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 16:47:11 GMT]]></title><description><![CDATA[<p>hi, vielen Dank habs ausprobiert- und noch ne Menge mehr Fehler in den anderen Methoden gefunden.</p>
<p>Gibts denn ne Möglichkeit den Compiler so einzustellen, dass er so offensichtliche Dinge sofort erkennt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781493</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781493</guid><dc:creator><![CDATA[Andreas_L]]></dc:creator><pubDate>Sat, 19 Sep 2009 16:47:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 17:01:39 GMT]]></title><description><![CDATA[<p>Andreas_L schrieb:</p>
<blockquote>
<p>Gibts denn ne Möglichkeit den Compiler so einzustellen, dass er so offensichtliche Dinge sofort erkennt?</p>
</blockquote>
<p>So offensichtlich ist das gar nicht:<br />
Was wäre, falls AVLNode für irgendeine Spezialisierung bereits const-qualifiziert ist?</p>
<p>Bei expliziter Instantiierung eines Klassentemplates werden alle Member ebenfalls instantiiert. Das kann man zum bequemen Testen mit benutzen (geht nat. nicht, wenn das Template Member enthält, die für bestimmte Spezialiserungen gar nicht existieren sollen).</p>
<p>Edit: hab die Zuweisung an Knoten übersehen, das wäre tatsächlich sofort diagnostizierbar.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781497</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781497</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 19 Sep 2009 17:01:39 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 17:04:55 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">const AVLNode* const Knoten
</code></pre>
<p>Das zweite <code>const</code> sorgt nur dafür, dass der <strong>kopierte</strong> Zeiger nicht verändert wird, ist also nicht allzu sinnvoll. Selbst mit der Zuweisung</p>
<pre><code class="language-cpp">Knoten = Knoten-&gt;rc;
</code></pre>
<p>wird der originale Zeiger nicht verändert, dazu müsstest du diesen als Referenz übergeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781499</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 19 Sep 2009 17:04:55 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 17:07:07 GMT]]></title><description><![CDATA[<p>&quot;Edit: hab die Zuweisung an Knoten übersehen, das wäre tatsächlich sofort diagnostizierbar.&quot;</p>
<p>was?<br />
du hältst den teil:</p>
<pre><code class="language-cpp">if(!Knoten) return NULL;
    while(Knoten-&gt;rc)
        Knoten = Knoten-&gt;rc;
    return Knoten;
</code></pre>
<p>für leichter diagnostizierbar als</p>
<pre><code class="language-cpp">const int Wert = 4;
    Wert = 5;
</code></pre>
<p>?</p>
<p>hab ich das falsch verstanden oder wieso sollte das so sein?</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781501</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781501</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sat, 19 Sep 2009 17:07:07 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sat, 19 Sep 2009 17:31:44 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>hab ich das falsch verstanden</p>
</blockquote>
<p>ja. Diesen Teil des Codes habe ich komplett überlesen, weil er uninteressant ist. Das Erste, was mir aufgefallen war, ist die Diskrepanz zwischen Rückgabetyp und Argument. So ist das eben mit der selektiven Wahrnehmung <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f576.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--sunglasses"
      title=":sunglasses:"
      alt="🕶"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781507</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781507</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Sat, 19 Sep 2009 17:31:44 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sun, 20 Sep 2009 09:30:37 GMT]]></title><description><![CDATA[<p>camper, so ging es mir auch. Den unwichtigen Teil habe ich genauso überlesen...</p>
<p>Daran sieht man nun aber auch, auf welcher Ebene die Templates geparst werden, d.h. die constness wird erst semantisch überprüft (nicht schon bei der reinen syntaktischen Überprüfung).</p>
<p>P.S: Evtl. vllt. wegen eines möglichen const_cast?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781656</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781656</guid><dc:creator><![CDATA[Th69]]></dc:creator><pubDate>Sun, 20 Sep 2009 09:30:37 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sun, 20 Sep 2009 11:10:18 GMT]]></title><description><![CDATA[<p>Welcher Compiler? Denn wenn ich mich nicht irre, müssten solche Schnitzer schon beim Parsen des Templates und nicht erst beim Instantiieren gefunden werden. Manche COmpiler nehmens aber mit den zwei Phasen nicht so genau.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781677</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781677</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sun, 20 Sep 2009 11:10:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Templates - oder Compiler on Sun, 20 Sep 2009 15:28:48 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template&lt;typename T&gt;
void foo(T x)
{
	const int y = 3;
	++y;
}

int main()
{
	//foo(123);
}
</code></pre>
<p>msvc9 kompiliert das anstandslos - so gar, als ich ausversehen statt y x geschrieben hatte...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1781793</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1781793</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 20 Sep 2009 15:28:48 GMT</pubDate></item></channel></rss>