<?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[Multiple Source Files: Templates]]></title><description><![CDATA[<p>Wieso bekomme ich folgendes Bespielprogramm nicht zum laufen?</p>
<p>functions.cpp</p>
<pre><code class="language-cpp">#include &quot;functions.h&quot;

template&lt;typename T&gt;
bool print(T *t, unsigned int size)
{
	for(int i = 0; size; ++i)
	{
		cout &lt;&lt; t[i];
	}
}
</code></pre>
<p>functions.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
bool print(T *t, unsigned int size);
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;functions.h&quot;

int main()
{
	print(&quot;Hallo!&quot;, 6);
	return 0;
}
</code></pre>
<p>Es kommt immer der Linker-Error &quot;LNK2019: Verweis auf nicht aufgelöstes externes<br />
Symbol &quot;&quot;bool __cdecl print&lt;char const &gt;(char const *,unsigned int)&quot;<br />
(??<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>p</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>t</mi><mi mathvariant="normal">@</mi></mrow><annotation encoding="application/x-tex">print@</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">p</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit">t</span><span class="mord mathrm">@</span></span></span></span>$CBD@@YA_NPBDI@Z)&quot; in Funktion &quot;_main&quot;.</p>
<p>Was muss ich ändern damit es läuft?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/306230/multiple-source-files-templates</link><generator>RSS for Node</generator><lastBuildDate>Sat, 08 Aug 2026 10:04:58 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/306230.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 21 Jul 2012 21:20:47 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:20:47 GMT]]></title><description><![CDATA[<p>Wieso bekomme ich folgendes Bespielprogramm nicht zum laufen?</p>
<p>functions.cpp</p>
<pre><code class="language-cpp">#include &quot;functions.h&quot;

template&lt;typename T&gt;
bool print(T *t, unsigned int size)
{
	for(int i = 0; size; ++i)
	{
		cout &lt;&lt; t[i];
	}
}
</code></pre>
<p>functions.h</p>
<pre><code class="language-cpp">#include &lt;iostream&gt;

template&lt;typename T&gt;
bool print(T *t, unsigned int size);
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;functions.h&quot;

int main()
{
	print(&quot;Hallo!&quot;, 6);
	return 0;
}
</code></pre>
<p>Es kommt immer der Linker-Error &quot;LNK2019: Verweis auf nicht aufgelöstes externes<br />
Symbol &quot;&quot;bool __cdecl print&lt;char const &gt;(char const *,unsigned int)&quot;<br />
(??<span class="katex"><span class="katex-mathml"><math><semantics><mrow><mi>p</mi><mi>r</mi><mi>i</mi><mi>n</mi><mi>t</mi><mi mathvariant="normal">@</mi></mrow><annotation encoding="application/x-tex">print@</annotation></semantics></math></span><span class="katex-html" aria-hidden="true"><span class="strut" style="height:0.69444em;"></span><span class="strut bottom" style="height:0.8888799999999999em;vertical-align:-0.19444em;"></span><span class="base textstyle uncramped"><span class="mord mathit">p</span><span class="mord mathit" style="margin-right:0.02778em;">r</span><span class="mord mathit">i</span><span class="mord mathit">n</span><span class="mord mathit">t</span><span class="mord mathrm">@</span></span></span></span>$CBD@@YA_NPBDI@Z)&quot; in Funktion &quot;_main&quot;.</p>
<p>Was muss ich ändern damit es läuft?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234639</guid><dc:creator><![CDATA[cppler]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:20:47 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:30:56 GMT]]></title><description><![CDATA[<p>Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein. Wenn du dich etwas einliest, weißt du auch, warum das so ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234640</guid><dc:creator><![CDATA[theliquidwave]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:30:56 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:41:41 GMT]]></title><description><![CDATA[<p><strong>Lösung:</strong><br />
Du musst function.cpp löschen und</p>
<pre><code class="language-cpp">template&lt;typename T&gt;
bool print(T *t, unsigned int size)
{
    for(int i = 0; size; ++i)
    {
        cout &lt;&lt; t[i];
    }
}
</code></pre>
<p>in den header verschieben. Deine function.h sollte dann so aussehen:</p>
<pre><code class="language-cpp">#ifndef FUNCTION_H // Include guards
#define FUNCTION_H
template&lt;typename T&gt;
bool print(T *t, unsigned int size)
{
    for(int i = 0; size; ++i)
    {
        cout &lt;&lt; t[i];
    }
} 

#endif
</code></pre>
<p><strong>Erklärung:</strong><br />
Templates sind nur Vorlagen für Funktionen, der Compiler generiert den Code der Funktion für erst, wenn das Template verwendet wird. Er setzt so zusagen den Typ ein (man nennt es auch &quot;das Template wird instanziiert&quot;). Um den Code der Funktion erstellen zu können, benötigt der Compiler jedoch den Rumpf der Funktion, also die Implementierung. (Da jede .cpp einzeln kompiliert wird, aber er erst in der main.cpp (oder wo das Template verwendet wird) weiß, für welche Typen das Template verwendet werden soll). Deswegen muss auch die Implementierung des Templates in den Header.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234641</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234641</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:41:41 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:46:18 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein. Wenn du dich etwas einliest, weißt du auch, warum das so ist.</p>
</blockquote>
<p>Das ist auch in C++11 nicht anders.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234642</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234642</guid><dc:creator><![CDATA[Kellerautomat]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:46:18 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:46:40 GMT]]></title><description><![CDATA[<p>theliquidwave schrieb:</p>
<blockquote>
<p>Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein.</p>
</blockquote>
<p>meinst du damit export oder ist das generell in C++11 so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234643</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:46:40 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:48:35 GMT]]></title><description><![CDATA[<p>Skym0sh0 schrieb:</p>
<blockquote>
<p>theliquidwave schrieb:</p>
<blockquote>
<p>Templates müssen bei nicht-C++11-Compilern immer in den Header-Dateien bzw. vor dem Linken bekannt sein.</p>
</blockquote>
<p>meinst du damit export oder ist das generell in C++11 so?</p>
</blockquote>
<p>Ich denke er meint export, sonst ist in C++11 da auch nichts anders</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234644</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234644</guid><dc:creator><![CDATA[pyhax]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:48:35 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:48:45 GMT]]></title><description><![CDATA[<p>OK, muss also alles in den Header rein...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234645</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234645</guid><dc:creator><![CDATA[cppler]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:48:45 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sat, 21 Jul 2012 21:53:41 GMT]]></title><description><![CDATA[<p>Im Gegenteil, mit export wäre das <em>vor</em> C++ 11 zumindest <em>theoretisch</em> möglich gewesen (allerdings hat das praktisch kein Compiler jemals unterstützt). Da export mit C++ 11 abgeschafft wurde, geht es nun gar nicht mehr.</p>
<p>cppler schrieb:</p>
<blockquote>
<p>OK, muss also alles in den Header rein...</p>
</blockquote>
<p>ja</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234647</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234647</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sat, 21 Jul 2012 21:53:41 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sun, 22 Jul 2012 04:06:01 GMT]]></title><description><![CDATA[<p>Naja es ginge mit extern, oder?<br />
Allerdings auch nur wenn man alle Typen kennt mit denen das Template instanziert wird.</p>
<p>EDIT: OK, extern braucht man gar nicht unbedingt, aber halt ne explizite Instanzierung in irgendeiner TU /EDIT</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234662</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234662</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sun, 22 Jul 2012 04:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sun, 22 Jul 2012 07:08:25 GMT]]></title><description><![CDATA[<p>Naja, mit extern kann man aber, wie du selbst schon sagst, nur eine explizite Instanz eines template deklarieren. Du kannst nicht das template an sich irgendwo separat definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234671</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234671</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 22 Jul 2012 07:08:25 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sun, 22 Jul 2012 14:42:25 GMT]]></title><description><![CDATA[<p>@ccpler:<br />
Mit einem kleinen Trick kannst du dir sogar die Übergabe der Größe sparen:</p>
<pre><code class="language-cpp">template&lt;typename T, int SIZE&gt; 
bool print(T (&amp;t)[SIZE])
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2234727</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234727</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Sun, 22 Jul 2012 14:42:25 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Sun, 22 Jul 2012 15:30:53 GMT]]></title><description><![CDATA[<p>@KasF: Geht leider nur mit statischen Arrays und so wie es da steht auch nur mit Strings, die nicht nullteminiert sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2234743</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2234743</guid><dc:creator><![CDATA[bstr]]></dc:creator><pubDate>Sun, 22 Jul 2012 15:30:53 GMT</pubDate></item><item><title><![CDATA[Reply to Multiple Source Files: Templates on Tue, 24 Jul 2012 09:51:43 GMT]]></title><description><![CDATA[<p>bstr schrieb:</p>
<blockquote>
<p>@KasF: Geht leider nur mit statischen Arrays und so wie es da steht auch nur mit Strings, die nicht nullteminiert sind.</p>
</blockquote>
<p>Das alles spielt keine Rolle. Jedes Array kann an diese Referenz gebunden werden. Egal ob irgendwas statisch, nicht-statisch, null-terminiert oder nicht-null-terminiert ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2235177</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2235177</guid><dc:creator><![CDATA[[[global:guest]]]]></dc:creator><pubDate>Tue, 24 Jul 2012 09:51:43 GMT</pubDate></item></channel></rss>