<?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[Template-variable initialisieren]]></title><description><![CDATA[<p>Moin Leute!</p>
<p>Ich hab ein Problem mit meinem selbstgeschriebenen Template:</p>
<pre><code class="language-cpp">// Vektor auf vorgegebene Groesse setzen
			void SetSize(WORD iSize)
			{
				// vorgegebene Groesse &gt; aktuelle Groesse
				if (iSize &gt; std::vector&lt;T&gt;::size())
				{
					T p;
					//Nullelemente einfuegen bis vorgegebene Groesse erreicht
					while (iSize &gt; std::vector&lt;T&gt;::size())
					{
						push_back (SetNullElement(p));
					}
				}
				// vorgegebene Groesse &lt;= aktuelle Groesse
				else 
				{
					//Elemente loeschen bis vorgegebene Groesse erreicht
					while (iSize &lt; std::vector&lt;T&gt;::size())
					{
						pop_back();
					}
				}
			}
</code></pre>
<pre><code class="language-cpp">//Templatefunktionen zum Erzeugen von Nullelementen
	template&lt;typename  T&gt; T SetNullElement(T) 
	{
		T t;
		return t;
	}

	template&lt;typename T&gt; T* SetNullElement (T* p) 
	{ 
		return NULL;
	}
</code></pre>
<p>Beim Aufruf von SetNullElement mosert der Compiler rum, daß p nicht initialisiert ist. Eigentlich kein Problem, da durch die aufgerufene Funktion ja sichergestellt ist, das nichts mit der uninitialiserten Variable gemacht wird.</p>
<p>Beim Visual Studion poppt nun aber immer zur Laufzeit ein Fenster mit der Meldung &quot;Run-Time Check Failure #3 - The variable 'p' is being used without being initialized.&quot; hoch. Da ich dieses Fenster reichlich nervig finde, würde ich das gerne abstellen. Aber wie muss ich denn die Variable initialisieren? Ich weiß ja erst zur Laufzeit, ob ein Objekt oder ein Pointer übergeben wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/270863/template-variable-initialisieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 20:22:00 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/270863.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 19 Jul 2010 14:49:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Template-variable initialisieren on Tue, 20 Jul 2010 06:39:27 GMT]]></title><description><![CDATA[<p>Moin Leute!</p>
<p>Ich hab ein Problem mit meinem selbstgeschriebenen Template:</p>
<pre><code class="language-cpp">// Vektor auf vorgegebene Groesse setzen
			void SetSize(WORD iSize)
			{
				// vorgegebene Groesse &gt; aktuelle Groesse
				if (iSize &gt; std::vector&lt;T&gt;::size())
				{
					T p;
					//Nullelemente einfuegen bis vorgegebene Groesse erreicht
					while (iSize &gt; std::vector&lt;T&gt;::size())
					{
						push_back (SetNullElement(p));
					}
				}
				// vorgegebene Groesse &lt;= aktuelle Groesse
				else 
				{
					//Elemente loeschen bis vorgegebene Groesse erreicht
					while (iSize &lt; std::vector&lt;T&gt;::size())
					{
						pop_back();
					}
				}
			}
</code></pre>
<pre><code class="language-cpp">//Templatefunktionen zum Erzeugen von Nullelementen
	template&lt;typename  T&gt; T SetNullElement(T) 
	{
		T t;
		return t;
	}

	template&lt;typename T&gt; T* SetNullElement (T* p) 
	{ 
		return NULL;
	}
</code></pre>
<p>Beim Aufruf von SetNullElement mosert der Compiler rum, daß p nicht initialisiert ist. Eigentlich kein Problem, da durch die aufgerufene Funktion ja sichergestellt ist, das nichts mit der uninitialiserten Variable gemacht wird.</p>
<p>Beim Visual Studion poppt nun aber immer zur Laufzeit ein Fenster mit der Meldung &quot;Run-Time Check Failure #3 - The variable 'p' is being used without being initialized.&quot; hoch. Da ich dieses Fenster reichlich nervig finde, würde ich das gerne abstellen. Aber wie muss ich denn die Variable initialisieren? Ich weiß ja erst zur Laufzeit, ob ein Objekt oder ein Pointer übergeben wird...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1928652</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1928652</guid><dc:creator><![CDATA[Hellcat]]></dc:creator><pubDate>Tue, 20 Jul 2010 06:39:27 GMT</pubDate></item><item><title><![CDATA[Reply to Template-variable initialisieren on Mon, 19 Jul 2010 15:00:48 GMT]]></title><description><![CDATA[<p>Das geht einfacher:</p>
<pre><code class="language-cpp">void MyClass:SetSize( unsigned int NewSize )
{
   MyVector.resize( NewSize ); 
}
</code></pre>
<p>Fall 1: Der Vektor ist kleiner als die neue Größe:<br />
std::vector wächst auf die neue Größe und initialisiert die neuen Elemente mit dem Default Konstruktor. Für Pointer Typen ist die Default Konstruktion eine Initialisierung mit 0.</p>
<p>Fall 2: Der Vektor ist größer als die neue Größe:<br />
std::vector zerstört am Ende seines Puffers so viele Elemente, wie die Differenz zwischen alter und neuer Größe beträgt. Für die zu zerstörenden Elemente wird der Destruktor aufgerufen.</p>
<p>PS:<br />
Templates werden IMMER zur Compile Time aufgelöst, du weißt also sicher, ob´s ein Zeiger ist oder nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1928658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1928658</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Mon, 19 Jul 2010 15:00:48 GMT</pubDate></item><item><title><![CDATA[Reply to Template-variable initialisieren on Mon, 19 Jul 2010 14:59:49 GMT]]></title><description><![CDATA[<p>Abgesehen davon dass man das garantiert irgendwo abschalten kann: Dein Compiler hat recht. p wird uninitialisiert benutzt. Aber ich verstehe absolut nicht wofür. Was soll das p dort machen?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1928661</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1928661</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Mon, 19 Jul 2010 14:59:49 GMT</pubDate></item><item><title><![CDATA[Reply to Template-variable initialisieren on Tue, 20 Jul 2010 06:44:57 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18927">@DocShoe</a>: Danke, irgendwie hab ich schon geahnt daß ich zu kompliziert denke und es eine triviale Lösung dafür gibt...</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/19375">@SeppJ</a>: Ich weiß das der Compiler recht hat. Es geht darum, ein &quot;Nullobjekt&quot; zu erzeugen (sprich entweder ein Nullpointer wenn das Template für Pointer verwendet wird oder ein Objekt was über den Standardkonstruktor erzeugt wird wenn das Template für Objekte verwendet wird). Somit ist es egal, ob die Variable initialisiert wird, da nicht auf sie zugegriffen wird.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1928930</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1928930</guid><dc:creator><![CDATA[Hellcat]]></dc:creator><pubDate>Tue, 20 Jul 2010 06:44:57 GMT</pubDate></item><item><title><![CDATA[Reply to Template-variable initialisieren on Tue, 20 Jul 2010 07:05:49 GMT]]></title><description><![CDATA[<p>Hellcat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">if (iSize &gt; std::vector&lt;T&gt;::size())
</code></pre>
</blockquote>
<p>so ruft man keine nicht-statischen Elementfunktionen auf!</p>
<p>Hellcat schrieb:</p>
<blockquote>
<pre><code class="language-cpp">push_back (SetNullElement(p));
</code></pre>
</blockquote>
<p>du darfst auch einfach push_back(T()); verwenden. Aber gleich myvector.resize(...); verwenden ist noch besser.</p>
<p>Dein SetNullElement gibt auch für eingebaute Typen wie int, double (u.s.w.) Müll zurück. Die haben keinen &quot;Defaultkonstruktor&quot;.<br />
Doof:</p>
<pre><code class="language-cpp">T t; // uninitialisiert bei int, double, etc
return t;
</code></pre>
<p>Besser:</p>
<pre><code class="language-cpp">return T(); // liefert 0 bei int/double/...
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1928937</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1928937</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Tue, 20 Jul 2010 07:05:49 GMT</pubDate></item></channel></rss>