<?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 mit VS .net 2003]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe folgendes Problem mit <a href="http://VS.net" rel="nofollow">VS.net</a> 2003. Wenn ich eine Klasse mit einem Template definiere wird allem Anschein nach die .cpp Datei zur Klasse ignoriert bzw. nicht mitübersetzt. Beispiel:</p>
<p>.h Datei:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class Beispiel
{
    public:
        Beispiel(void);
}
</code></pre>
<p>.cpp Datei:</p>
<pre><code class="language-cpp">#include &quot;Beispiel.h&quot;

template &lt;class T&gt; Beispiel&lt;T&gt;::Beispiel(void)
{
    //machwas
}
</code></pre>
<p>Wenn ich es so anstelle, bekomme ich beim Aufruf des Konstruktors eine unaufgelöste externe Referenz. Wenn ich den Code aus der .cpp Datei in die .h Datei kopiere - hinter die schließende Klammer der Klasse - wird alles Fehlerfrei übersetzt und ausgeführt. Hatte jemand schon mal ein ähnliches Problem oder hat jemand eine Idee, woran es liegen könnte? Ach ja, ist nur bei Klassen mit templates so, &quot;normale&quot; Klassen lassen sich ohne Probleme in eine .cpp und eine .h Datei aufteilen.</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/159562/templates-mit-vs-net-2003</link><generator>RSS for Node</generator><lastBuildDate>Tue, 28 Jul 2026 09:22:32 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/159562.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 16 Sep 2006 15:46:28 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Sat, 16 Sep 2006 15:46:28 GMT]]></title><description><![CDATA[<p>Hallo Leute,<br />
ich habe folgendes Problem mit <a href="http://VS.net" rel="nofollow">VS.net</a> 2003. Wenn ich eine Klasse mit einem Template definiere wird allem Anschein nach die .cpp Datei zur Klasse ignoriert bzw. nicht mitübersetzt. Beispiel:</p>
<p>.h Datei:</p>
<pre><code class="language-cpp">template&lt;class T&gt; class Beispiel
{
    public:
        Beispiel(void);
}
</code></pre>
<p>.cpp Datei:</p>
<pre><code class="language-cpp">#include &quot;Beispiel.h&quot;

template &lt;class T&gt; Beispiel&lt;T&gt;::Beispiel(void)
{
    //machwas
}
</code></pre>
<p>Wenn ich es so anstelle, bekomme ich beim Aufruf des Konstruktors eine unaufgelöste externe Referenz. Wenn ich den Code aus der .cpp Datei in die .h Datei kopiere - hinter die schließende Klammer der Klasse - wird alles Fehlerfrei übersetzt und ausgeführt. Hatte jemand schon mal ein ähnliches Problem oder hat jemand eine Idee, woran es liegen könnte? Ach ja, ist nur bei Klassen mit templates so, &quot;normale&quot; Klassen lassen sich ohne Probleme in eine .cpp und eine .h Datei aufteilen.</p>
<p>Danke im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138597</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138597</guid><dc:creator><![CDATA[Herb]]></dc:creator><pubDate>Sat, 16 Sep 2006 15:46:28 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Sat, 16 Sep 2006 16:42:28 GMT]]></title><description><![CDATA[<p>Templatedefinitionen müssen mit in der h-Datei stehen. Templates können ja erst angelegt werden, wenn sie vom Nutzer mit einem bestimmtem Typ angelegt werden.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1138633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1138633</guid><dc:creator><![CDATA[Pellaeon]]></dc:creator><pubDate>Sat, 16 Sep 2006 16:42:28 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Sun, 17 Sep 2006 13:47:08 GMT]]></title><description><![CDATA[<p>Versteh ich jetzt nicht ganz, der Code wird doch übersetzt und dann ist von .h und .cpp Dateien sowieso nichts mehr übrig. Außerdem:<br />
Habs mit VS 2005 probiert, wird ohne Probleme übersetzt. Demnach ist es ein Problem von VS .net 2003.<br />
Auch Methoden, die sich nicht auf den Typen des Templates beziehen, z.B.</p>
<pre><code class="language-cpp">int Beispiel::getCount()
{
 //...
}
</code></pre>
<p>lösen eine unaufgelöste externe Referenz aus, und das kann ja wohl irgendwie nicht sein. Das Problem ist, dass ich eine dll bzw. eine .lib übersetzen möchte und nicht will, dass alees in der .h steht - dann könnt ich das mit der Bibliothek auch gleich sein lassen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139019</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139019</guid><dc:creator><![CDATA[Herb]]></dc:creator><pubDate>Sun, 17 Sep 2006 13:47:08 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Sun, 17 Sep 2006 17:11:17 GMT]]></title><description><![CDATA[<p>Ja, das ist ein bekanntes Problem von <a href="http://VS6-VS.net" rel="nofollow">VS6-VS.net</a> 2003</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139112</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139112</guid><dc:creator><![CDATA[dEUs]]></dc:creator><pubDate>Sun, 17 Sep 2006 17:11:17 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Mon, 18 Sep 2006 09:01:54 GMT]]></title><description><![CDATA[<p>Beim Umgang mit Templates muß der Compiler <strong>bei der Instanziierung</strong> (d.h. in deinem Hauptprogramm) den Quellcode der Funktionen kennen, um den richtigen Code zu erzeugen (auch wenn's nur Kleinigkeiten sein dürften - Beispiel&lt;int&gt;::Beispiel() sieht im fertigen Programm anders aus als Beispiel<a href="std::string" rel="nofollow">std::string</a>::Beispiel()). Wenn du nur die Template-Datei übersetzt, weiß der Compiler ja nicht, ob er später den Code für Beispiel&lt;int&gt;, Beispiel<a href="std::string" rel="nofollow">std::string</a> oder Beispiel&lt;dummy_class&gt; benötigen wird, deshalb <strong>kann</strong> er an dieser Stelle nichts bereitstellen.</p>
<p>Und darum kommst du nicht drum herum, deinen Quellcode in den Header zu packen (außer - du packst die Funktionen in eine &quot;.inc&quot;-Datei, die du am Ende des Headers includest).</p>
<p>PS: Und in einer Template-Klasse beziehen sich afaik ALLE Methoden (irgendwo) auf den Typ des Templates - auch wenn man ihnen das auf den ersten Blick nicht ansieht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139405</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139405</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Mon, 18 Sep 2006 09:01:54 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Mon, 18 Sep 2006 17:22:02 GMT]]></title><description><![CDATA[<p>Hört sich soweit ganz vernünftig an. Aber ich kann ja auch erst zur Laufzeit entscheiden, wie ich die Klasse instanziere (Als Beispiel bei einer ausfühtbaren datei). Dann müsste doch der Compiler das Template entweder alle Möglichkeiten (also im Prinzip für alle bekannten Typen und Klassen) übersetzen, garnicht überstzen und meckern oder es doch irgendwie gebacken bekommen, die Klasse als Template zu übersetzen, das zur Laufzeit mit einem beliebigen Typen initialisiert werden kann.<br />
Ach ja, mit VS 2005 funktioniert es auch nicht so richtig - mein Fehler.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139847</guid><dc:creator><![CDATA[Herb]]></dc:creator><pubDate>Mon, 18 Sep 2006 17:22:02 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Mon, 18 Sep 2006 18:05:57 GMT]]></title><description><![CDATA[<p>Herb schrieb:</p>
<blockquote>
<p>Hört sich soweit ganz vernünftig an. Aber ich kann ja auch erst zur Laufzeit entscheiden, wie ich die Klasse instanziere (Als Beispiel bei einer ausfühtbaren datei).</p>
</blockquote>
<p>Nö, Instanziierungen von Templateklassen und -funktionen stehen zur Compilezeit fest.</p>
<blockquote>
<p>Dann müsste doch der Compiler das Template entweder alle Möglichkeiten (also im Prinzip für alle bekannten Typen und Klassen) übersetzen,</p>
</blockquote>
<p>Und wieviel sind das? Na? Genau.</p>
<blockquote>
<p>garnicht überstzen und meckern oder es doch irgendwie gebacken bekommen, die Klasse als Template zu übersetzen, das zur Laufzeit mit einem beliebigen Typen initialisiert werden kann.</p>
</blockquote>
<p>Wie gesagt, der Compiler übersetzt Templates für genau die Typen, die zur Compilezeit angegeben sind. Und er braucht dazu den Quellcode des Templates.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1139898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1139898</guid><dc:creator><![CDATA[MFK]]></dc:creator><pubDate>Mon, 18 Sep 2006 18:05:57 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Tue, 19 Sep 2006 08:30:11 GMT]]></title><description><![CDATA[<p>Klar, hast natürlich recht. Darauf weist im nachhinein gesehen auch der Linker Fehler hin.<br />
Was ich trotzdem nicht verstehe ist das Verhalten, das VS an dieser Stelle an den Tag legt. Wenn ich mit dem Assistenten eine Methode hinzufüge, landet die Definition in der .cpp.<br />
Wenn ich eine Bibliothek übersetze, ist schon klar dass die .h dann in dem Projekt, in dem ich die Bibliothek verwende, allein nicht ausreicht, weil einfach keine Definitionen da sind.<br />
Wenn ich aber eine .exe übersetze dann sind doch alle Definitionen da, da ist es doch völlig egal wo sie stehen, VS sollte sie eigentlich finden. Das Problem ist, dass VS die .cpp Datei völlig ignoriert - da kann der totäle Müll drin stehen, interessiert nicht weiter, und das sollte eigentlich nicht sein, die Datei gehört schließlich zum Projekt.</p>
<p>Danke für die Antworten, hat mir sehr weitergeholfen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140156</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140156</guid><dc:creator><![CDATA[Herb]]></dc:creator><pubDate>Tue, 19 Sep 2006 08:30:11 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Tue, 19 Sep 2006 11:31:29 GMT]]></title><description><![CDATA[<blockquote>
<p>Wenn ich aber eine .exe übersetze dann sind doch alle Definitionen da, da ist es doch völlig egal wo sie stehen, VS sollte sie eigentlich finden.</p>
</blockquote>
<p>Falsch... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Man benötigt um eine Bibliothek verwenden zu können die Header-Dateien und die Lib-Datei. Da wird nicht mehr mit den Cpp-Dateien der Bibliothek rumhantiert. Ansonsten müßte jeder der eine Bibliothek schreibt auch den Quellcode offenlegen anstelle nur die Header-Dateien der Schnittstelle....</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1140283</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1140283</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Tue, 19 Sep 2006 11:31:29 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Thu, 21 Sep 2006 08:06:45 GMT]]></title><description><![CDATA[<p>Da hast Du mich jetzt irgendwie falsch verstanden. In der Diskussion oben ging es ja gerade darum, dass der Code für eine template-Klasse eben nicht in der Lib stehen kann, sondern in der .h Datei. (Da sonst, wenn mit der Lib gearbeitet wird, keine entsprechende Template Klasse erzeugt werden kann).<br />
Mir gings darum:<br />
Wenn ich eine exe erstelle, ohne Verwendung von irgendwelchen libs, dann sollte es doch völlig egal sein, wo die definition für das Template stehen - weil es ja Sache der IDE (VS) ist, welche Dateien es heranzieht und welche nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141602</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141602</guid><dc:creator><![CDATA[Herb]]></dc:creator><pubDate>Thu, 21 Sep 2006 08:06:45 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Thu, 21 Sep 2006 08:58:04 GMT]]></title><description><![CDATA[<p>Aber aus der Exe kannst du dir sowieso keine Funktionen rausgreifen - das ist ein fertiges Programm, das du ausführen und bei der Arbeit bewundern kannst. Um bestimmte Funktionen oder Klassen in deinen Programmen einsetzen zu können, benötigst du eine Lib.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141639</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141639</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Thu, 21 Sep 2006 08:58:04 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Thu, 21 Sep 2006 09:24:55 GMT]]></title><description><![CDATA[<p>Ich dachte das Template befände sich in einer Lib... Sorry.</p>
<p>Die Templates werden vom Compiler aufgelöst und dem ist es ziemlich egal ob eine Exe oder eine Lib erzeugt wird.<br />
H-Files werden vor dem Übersetzen vom Precompiler in die Cpp-Dateien kopiert.<br />
Eine Template-Implementierung in einem Header wird somit auch in alle Cpp-Dateien vor dem Übersetzen hineinkopiert und ist dementsprechend auch zu jeder Zeit während des Übersetzens ausgeprägbar.<br />
Wenn die Implementierung des Templates in einer Cpp-Datei erfolgt, kann der Compiler das Template nur beim Übersetzen der Cpp-Datei ausprägen in der sich die Implementierung des Templates befindet. Da weiß der Compiler aber nicht so ohne weiteres welche Ausprägungen benötigt werden.<br />
Ich denke das macht es deutlich, dass es ein klein wenig komplexer ist die Templates aufzulösen wenn man es zuläßt die Deklaration eines Templates von seiner Implementierung auf Header- und Cpp-Datei zu verteilen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1141658</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1141658</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Thu, 21 Sep 2006 09:24:55 GMT</pubDate></item><item><title><![CDATA[Reply to Templates mit VS .net 2003 on Fri, 22 Sep 2006 16:50:15 GMT]]></title><description><![CDATA[<p>CStoll schrieb:</p>
<blockquote>
<p>Aber aus der Exe kannst du dir sowieso keine Funktionen rausgreifen</p>
</blockquote>
<p>Ist mir natürlich klar, es ging aber darum:<br />
Wenn ich eine lib übersetze müssen die Definitionen <strong>und</strong> Deklarationen von Templates in die header Datei, was ja aus den ganzen Posts hervorgeht.<br />
Ich dachte jetzt, ich übersetz einfach mal eine .exe und schau ob es da ok ist, wenn die Deaklarationen in diesem Fall in der .cpp stehen - ist es nicht, was nach dem Post von Mathias auch einleuchtet.<br />
Was mich jetzt immer noch stört ist, dass der Funktionsassistent von VC das nicht gebacken bekommt und von vorne herein bei Templates alles in die Header-Datei schreibt - was aber nicht zu ändern ist.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1142708</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1142708</guid><dc:creator><![CDATA[Herb]]></dc:creator><pubDate>Fri, 22 Sep 2006 16:50:15 GMT</pubDate></item></channel></rss>