<?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[Spezialisierung eines Funktionstemplates - redefinition]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich frage mich warum mir der Compiler ein Redefinition error auswirft bei folgendem Code:</p>
<pre><code class="language-cpp">template &lt; typename T &gt; inline T GeData2Value(const vdata&amp; t_data) { return t_data.GetFloat(); }
template &lt; &gt; inline LONG GeData2Value(const vdata&amp; t_data) { return t_data.GetLong(); }
</code></pre>
<p>Ist in einem Header und er sagt mir &quot;Redefintion of T GeData2Value(const vdata&amp;) with T=LONG&quot;. Hä? Kann mir einer mal erklären was ich da falsch mache. Irgendwie will ichs nich raffen. <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>Es bringt auch nichts, die Spezialisierung lediglich in der header zu deklarieren und die implementierung in einer .cpp zu setzen.</p>
<p>Vielen Dank im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/308683/spezialisierung-eines-funktionstemplates-redefinition</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 17:29:41 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/308683.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 02 Oct 2012 14:16:34 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 14:16:34 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich frage mich warum mir der Compiler ein Redefinition error auswirft bei folgendem Code:</p>
<pre><code class="language-cpp">template &lt; typename T &gt; inline T GeData2Value(const vdata&amp; t_data) { return t_data.GetFloat(); }
template &lt; &gt; inline LONG GeData2Value(const vdata&amp; t_data) { return t_data.GetLong(); }
</code></pre>
<p>Ist in einem Header und er sagt mir &quot;Redefintion of T GeData2Value(const vdata&amp;) with T=LONG&quot;. Hä? Kann mir einer mal erklären was ich da falsch mache. Irgendwie will ichs nich raffen. <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>Es bringt auch nichts, die Spezialisierung lediglich in der header zu deklarieren und die implementierung in einer .cpp zu setzen.</p>
<p>Vielen Dank im voraus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256496</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256496</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Tue, 02 Oct 2012 14:16:34 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 14:57:13 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">template &lt; typename T &gt; inline T GeData2Value(const vdata&amp; t_data) { return t_data.GetFloat(); }
template &lt; &gt; inline LONG GeData2Value&lt;LONG&gt;(const vdata&amp; t_data) { return t_data.GetLong(); }
</code></pre>
<p>Und jetzt finde den kleinen, aber feinen Unterschied <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Allerdings: was ist LONG? das riecht nach einem muffigen #define aus irgendeiner alten Bibliothek. Und wozu templates, wenn du eh nur zwei Varianten hast? (float und long) Den Typ musst du in dem Fall eh immer explizit angeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256517</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256517</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 02 Oct 2012 14:57:13 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 15:03:12 GMT]]></title><description><![CDATA[<p>oh man, das isses?</p>
<p>Der Datentyp kommt leider nicht von mir und du hast recht, ist schön dreckig über ein #define gelöst von der API die ich nutzen muss.</p>
<p>Template weil von einem anderen Template aus aufgerufen.</p>
<p>Anyway, vielen Dank!!!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256520</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256520</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Tue, 02 Oct 2012 15:03:12 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 15:09:05 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>Template weil von einem anderen Template aus aufgerufen.</p>
</blockquote>
<p>Das ist keine sinnvolle Begründung.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256524</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256524</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Tue, 02 Oct 2012 15:09:05 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 15:15:15 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Katachi schrieb:</p>
<blockquote>
<p>Template weil von einem anderen Template aus aufgerufen.</p>
</blockquote>
<p>Das ist keine sinnvolle Begründung.</p>
</blockquote>
<p>Warum (toller kommentar im übrigen)? Wie würdest du es denn vereinfachen:</p>
<pre><code class="language-cpp">template &lt; typename T &gt;
T Class::do_it() const
{
  //ca. 100 Zeilen code...
  return GeData2Value&lt;T&gt;(t_val);
}
</code></pre>
<p>Ohne GeData2Value als template wüsst ich mir nicht weiter zu helfen als diese funktion wiederum zu spezialisieren. Ich bin offen für tipps (natürlich könnte ich GeData2Value in der Klasse als template definieren und für die restlichen Überladen, aber wo liegt der Unterschied? Und wie könnte ich die GeData2Value Funktion dann von außerhalb aufrufen?)</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256530</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Tue, 02 Oct 2012 15:15:15 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 15:25:37 GMT]]></title><description><![CDATA[<p>Katachi schrieb:</p>
<blockquote>
<p>Der Datentyp kommt leider nicht von mir und du hast recht, ist schön dreckig über ein #define gelöst von der API die ich nutzen muss.</p>
</blockquote>
<p>Kannst du die dreckige API nicht wegkapseln, damit so ein Müll wie die #defines nicht dein ganzes Projekt verseuchen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<blockquote>
<p>Template weil von einem anderen Template aus aufgerufen.</p>
</blockquote>
<p>Hab ich mir schon fast gedacht. In so einem Fall würde ich das Template allerdings für beide Typen spezialisieren und den nicht spezialisierten Fall undefiniert lassen. So kriegst du sofort eine aussagekräftige Fehlermeldung, wenn du Class&lt;int&gt; benutzt und musst dich nicht wundern, warum seltsame Werte rauskommen (du willst dann mit ziemlicher Wahrscheinlichkeit nicht (int)getFloat() als Ergebnis kriegen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256535</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256535</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 02 Oct 2012 15:25:37 GMT</pubDate></item><item><title><![CDATA[Reply to Spezialisierung eines Funktionstemplates - redefinition on Tue, 02 Oct 2012 15:46:05 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Kannst du die dreckige API nicht wegkapseln, damit so ein Müll wie die #defines nicht dein ganzes Projekt verseuchen? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Wäre wahrscheinlich nicht verkehrt...da müsste ich aber nochmal die anderen Mitprogrammierer fragen (leider bin ich nicht alleine in dem Projekt) und ich gebe zu da spielt dann sicherlich auch ein wenig die Faulheit mit rein <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Hab ich mir schon fast gedacht. In so einem Fall würde ich das Template allerdings für beide Typen spezialisieren und den nicht spezialisierten Fall undefiniert lassen. So kriegst du sofort eine aussagekräftige Fehlermeldung, wenn du Class&lt;int&gt; benutzt und musst dich nicht wundern, warum seltsame Werte rauskommen (du willst dann mit ziemlicher Wahrscheinlichkeit nicht (int)getFloat() als Ergebnis kriegen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Mensch, das ist gar nicht mal so blöd. Thx, guter Tipp! Warum komm ich nich alleine auf sowas... <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="😃"
    /> Aber dafür hab ich ja mein c-plusplus forum <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="🙂"
    /> Notiert, gemerkt und abgeheftet</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2256540</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2256540</guid><dc:creator><![CDATA[Katachi]]></dc:creator><pubDate>Tue, 02 Oct 2012 15:46:05 GMT</pubDate></item></channel></rss>