<?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[Linken bei Template-Klassen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bekomme das hier einfach nicht erfolgreich ausgeführt.<br />
Wenn ich das als Klasse ohne Template schreibe und direkt mit int arbeite, funktioniert es wunderbar, aber mit dem hier gezeigten Code bekomme ich diese Fehlermeldung:</p>
<blockquote>
<p>obj\Release\main.o:main.cpp:(.text.startup+0x1e)||undefined reference to `Test&lt;int&gt;::Test(int)'</p>
</blockquote>
<p>Was übersehe ich hierbei?</p>
<pre><code class="language-cpp">//main.cpp
#include &quot;test.h&quot;

int main()
{
    Test&lt;int&gt; a(2); 
    return 0;
}
</code></pre>
<pre><code class="language-cpp">//test.h
#ifndef TEST_H
#define TEST_H

template&lt;class T&gt;
class Test
{
private:
    T m;
public:
    Test(T);
};

#endif
</code></pre>
<pre><code class="language-cpp">//test.cpp
#include &quot;test.h&quot;

template&lt;class T&gt;
Test&lt;T&gt;::Test(T m)
{
    this-&gt;m=m;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/298548/linken-bei-template-klassen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 13 Aug 2026 18:54:23 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/298548.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 22 Jan 2012 23:04:09 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Linken bei Template-Klassen on Sun, 22 Jan 2012 23:05:58 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich bekomme das hier einfach nicht erfolgreich ausgeführt.<br />
Wenn ich das als Klasse ohne Template schreibe und direkt mit int arbeite, funktioniert es wunderbar, aber mit dem hier gezeigten Code bekomme ich diese Fehlermeldung:</p>
<blockquote>
<p>obj\Release\main.o:main.cpp:(.text.startup+0x1e)||undefined reference to `Test&lt;int&gt;::Test(int)'</p>
</blockquote>
<p>Was übersehe ich hierbei?</p>
<pre><code class="language-cpp">//main.cpp
#include &quot;test.h&quot;

int main()
{
    Test&lt;int&gt; a(2); 
    return 0;
}
</code></pre>
<pre><code class="language-cpp">//test.h
#ifndef TEST_H
#define TEST_H

template&lt;class T&gt;
class Test
{
private:
    T m;
public:
    Test(T);
};

#endif
</code></pre>
<pre><code class="language-cpp">//test.cpp
#include &quot;test.h&quot;

template&lt;class T&gt;
Test&lt;T&gt;::Test(T m)
{
    this-&gt;m=m;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2171260</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171260</guid><dc:creator><![CDATA[*Cassiopeia*]]></dc:creator><pubDate>Sun, 22 Jan 2012 23:05:58 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Sun, 22 Jan 2012 23:09:40 GMT]]></title><description><![CDATA[<p>Templates müssen komplett im Header implementiert werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171261</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171261</guid><dc:creator><![CDATA[manni66]]></dc:creator><pubDate>Sun, 22 Jan 2012 23:09:40 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Sun, 22 Jan 2012 23:28:07 GMT]]></title><description><![CDATA[<p>okay, danke!<br />
Warum muss das so?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171263</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171263</guid><dc:creator><![CDATA[*Cassiopeia*]]></dc:creator><pubDate>Sun, 22 Jan 2012 23:28:07 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Sun, 22 Jan 2012 23:43:47 GMT]]></title><description><![CDATA[<p>weil das einfach nicht implementierbar ist. Überleg dir mal, wie compilieren funktioneirt:</p>
<p>Der Compiler schaut sich jede cpp einzeln an und verarbeitet sie zu objekt-Dateien(assembler code). Wenn in test.cpp die Definition steht, aber erst in main.cpp klar ist, für welchen Typ die Funktion erzeugt werden muss, dann hat der Compiler zu keinem Zeitpunkt die benötigten Informationen um den source in Objektdateien umzuwandeln -&gt; geht nicht.</p>
<p>In der Tat gab es einmal das export keyword für templates, das genau das erlaubt hat. Das war aber ein riesiger Schuss in den Ofen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171265</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171265</guid><dc:creator><![CDATA[otze]]></dc:creator><pubDate>Sun, 22 Jan 2012 23:43:47 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Sun, 22 Jan 2012 23:57:46 GMT]]></title><description><![CDATA[<p>Weil der Compiler die Definition des template kennen muss damit er es instanzieren kann.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171268</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171268</guid><dc:creator><![CDATA[dot]]></dc:creator><pubDate>Sun, 22 Jan 2012 23:57:46 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Mon, 23 Jan 2012 00:00:51 GMT]]></title><description><![CDATA[<p>Vielen Dank <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f642.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--slightly_smiling_face"
      title=":)"
      alt="🙂"
    /> Ist verständlich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171271</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171271</guid><dc:creator><![CDATA[*Cassiopeia*]]></dc:creator><pubDate>Mon, 23 Jan 2012 00:00:51 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Mon, 23 Jan 2012 02:22:02 GMT]]></title><description><![CDATA[<p>Warum? Weil die <a href="http://en.wikipedia.org/wiki/One_Definition_Rule" rel="nofollow">ODR</a> das so sagt!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171277</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171277</guid><dc:creator><![CDATA[krümelkacker]]></dc:creator><pubDate>Mon, 23 Jan 2012 02:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Linken bei Template-Klassen on Mon, 23 Jan 2012 07:16:44 GMT]]></title><description><![CDATA[<p>krümelkacker schrieb:</p>
<blockquote>
<p>Warum? Weil die <a href="http://en.wikipedia.org/wiki/One_Definition_Rule" rel="nofollow">ODR</a> das so sagt!</p>
</blockquote>
<p>Nö, die sagt nur, dass Templates in mehreren ÜEs definiert sein dürfen, und unter welchen Bedingungen das zu geschehen hat.<br />
Das Problem des OP ist eher, dass er nirgendwo die besagte Funktion instanziiert hat, wo die Definition des Templates sichtbar war. Ich habs nicht genau aus dem Standard lesen können, aber evtl. muss die Definition sogar überall dort sichtbar sein, wo die Memberfunktion instanziiert wird. Das stünde dann irgendwo in §14.7.X</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2171287</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2171287</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Mon, 23 Jan 2012 07:16:44 GMT</pubDate></item></channel></rss>