<?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[Templates ?!]]></title><description><![CDATA[<p>Hallo !</p>
<p>Wieso muss man bei Templateklassen die Implementation in der Headerdatei machen ?? Wenn ich es trenne wie es sich gehört kommt immer der Fehler 'undefined reference to...', kopiere ich den Inhalt der myclass.cpp in die myclass.h Datei, dann funktionierts.</p>
<p>Gibt es keinen Weg die Trennung aufrecht zu erhalten ?? Versteh nicht warum das nur wegen Templates nicht gehen sollte ?!?!</p>
<p>Verwende gcc compiler für win32.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/219600/templates</link><generator>RSS for Node</generator><lastBuildDate>Tue, 06 Oct 2026 05:02:54 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/219600.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 05 Aug 2008 11:45:43 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates ?! on Tue, 05 Aug 2008 11:45:43 GMT]]></title><description><![CDATA[<p>Hallo !</p>
<p>Wieso muss man bei Templateklassen die Implementation in der Headerdatei machen ?? Wenn ich es trenne wie es sich gehört kommt immer der Fehler 'undefined reference to...', kopiere ich den Inhalt der myclass.cpp in die myclass.h Datei, dann funktionierts.</p>
<p>Gibt es keinen Weg die Trennung aufrecht zu erhalten ?? Versteh nicht warum das nur wegen Templates nicht gehen sollte ?!?!</p>
<p>Verwende gcc compiler für win32.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559563</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559563</guid><dc:creator><![CDATA[Gast23521]]></dc:creator><pubDate>Tue, 05 Aug 2008 11:45:43 GMT</pubDate></item><item><title><![CDATA[Reply to Templates ?! on Tue, 05 Aug 2008 11:49:52 GMT]]></title><description><![CDATA[<p>Würde ja auch laut C++-Norm auch gehen. Nur kann bisher kein Compiler, bis auf den Camenau, das keiner. Muß man also in den Header reinschreiben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559565</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559565</guid><dc:creator><![CDATA[BarnieGeroellheimer]]></dc:creator><pubDate>Tue, 05 Aug 2008 11:49:52 GMT</pubDate></item><item><title><![CDATA[Reply to Templates ?! on Tue, 05 Aug 2008 11:57:51 GMT]]></title><description><![CDATA[<p>Sehr seltsam <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
<p>Hätte mir viel Zeit und Ärger erspart wenn die Information auch in meinem C++ Buch stehen würde...</p>
<p>Kann man eigentlich template Klassen auch in C++ windows DLL's verpacken ??</p>
<p>Und noch eine Frage, gilt diese trennung von h und cpp datei auch für template funktionen ??</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559570</guid><dc:creator><![CDATA[Gast121499]]></dc:creator><pubDate>Tue, 05 Aug 2008 11:57:51 GMT</pubDate></item><item><title><![CDATA[Reply to Templates ?! on Tue, 05 Aug 2008 12:06:38 GMT]]></title><description><![CDATA[<p>Du sprichst (und da wird ein großer Unterschied deutlich!) hier gerade nicht von Templateklassen und -funktionen, sondern von Klassentemplates und Funktionstemplates. Das sind, wie der Name impliziert, nur Vorlagen für Klassen und Funktionen. Diese Vorlagen werden erst durch die Instanzierung zu wirklichen Klassen und Funktionen, für die Objektcode erzeugt wird.</p>
<p>Für die Templates selbst kann der Compiler also noch garkeinen Objektcode erzeugen. Deshalb ist auch der <strong>export</strong> Mechanismus nicht mit <strong>extern</strong> gleichzusetzen (sonst hätte man auch dasselbe Schlüsselwort nehmen können). Auch der Comeau-Compiler erzeugt für exportierte Templates mehr eine Art Zwischencode, keinen klassischen Objektcode.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559577</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Tue, 05 Aug 2008 12:06:38 GMT</pubDate></item><item><title><![CDATA[Reply to Templates ?! on Tue, 05 Aug 2008 12:18:18 GMT]]></title><description><![CDATA[<p>kleiner Erklärungsansatz warum das mit der Trennung per se nicht geht:<br />
Wenn du irgendwo ein Template instantiierst (z.B. vector&lt;double&gt;), dann generiert der Compiler aus der Templatedefinition und den Informationen die er über den verwendeten Typ (also double) hat, erst zu dem Zeitpunkt den fertigen Code, zu dem er die Instantiierung sieht. Damit er das machen kann, muss der Quellcode des Templates mitgeliefert werden, der Compiler kann nicht bereits aus einer Templatedefinition allein Objektcode erzeugen. Auch beim Comeau Compiler, der das export Keyword implementiert, wird die Templatedefinition noch an die Klienten mitgeliefert, in Form von irgendeinem Zwischencode. Die Instantiierung des Templates wird auch dort vom Compiler erzeugt, auch wenn man auf den ersten Blick erwarten könnte, dass dort wie bei normalen Klassen der Linker zuständig sein soll. (afaik war sowas in der Art ursprünglich mal beabsichtigt, weshalb export auch erst eingeführt worden ist, nur hat sich im nachhinein die richtige Umsetzung als nicht machbar erwiesen, so dass Comeau auch nur einen Kompomiss bietet)<br />
templateklassen kann man in DLLs packen - aber nicht wie du vielleicht eher gemeint hast Klassentemplates. Soll heißen: du kannst durchaus einen vector&lt;double&gt; in eine DLL packen (wenn du das Ganze noch etwas verpackst), eine DLL kann aber kein Template bereitstellen das dann noch mit allen möglichen Typen instantiiert werden kann. Der grund ist, dass eben der Compiler bei einer Instantiierung den Code erst generieren muss und nicht einfach zusammengelinkt werden kann.<br />
Genauso wie bei klassentemplates kann man Funktionstemplates nicht trennen, es muss immer die geasmte Definition geliefert werden, wenn man ein Funktionstemplate benutzen will. Man kann allerdings wenn man möchte die Deklaration und Definition in separate Dateien schreiben und die Definitionsdatei am Ende der Deklarationsdatei #includen</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559588</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559588</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 05 Aug 2008 12:18:18 GMT</pubDate></item><item><title><![CDATA[Reply to Templates ?! on Tue, 05 Aug 2008 12:58:24 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/9960">@pumuckl</a></p>
<p>Großes dankeschön für die ausführliche Erklräung !! Sowas ähnliches habe ich schon gelesen (das der Code erst generiert wird nachdem der Typ feststeht), aber jetzt versteh ichs.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a></p>
<p>Sry, den Unterschied kannte ich bis jetzt noch nicht.</p>
<p>Also so hab ichs jetzt verstanden:</p>
<p>Templateklasse = Klassse erzeugt aus einer Vorlage (mit fixem Typ zb int)</p>
<p>und</p>
<p>Klassentemplate = Vorlage für Klasse (mit typevariable)</p>
<p>Danke euch beiden für die Aufklärung <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="🙂"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1559619</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1559619</guid><dc:creator><![CDATA[Gast232424]]></dc:creator><pubDate>Tue, 05 Aug 2008 12:58:24 GMT</pubDate></item></channel></rss>