<?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 definition]]></title><description><![CDATA[<p>Hi,<br />
folgendes Konstrukt:</p>
<pre><code class="language-cpp">// A.h
#ifndef A_H
#define A_H

template&lt;typename T&gt;
class A
{
public:
	static unsigned short const us;
};

#endif // A_H
</code></pre>
<pre><code class="language-cpp">// B.h
#ifndef B_H
#define B_H

#include &quot;A.h&quot;

class B : public A&lt;B&gt;
{
};

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

template&lt;&gt;
unsigned short const A&lt;B&gt;::us = 12;
</code></pre>
<p>In main wird dann einfach nur eine variable von B angelegt und auf us zugegriffen.<br />
Mit MS Visual C++ 2005 Beta ging alles problemlos. Jetzt gibts Probleme wenn ich mit dev cpp arbeite.<br />
Linker Fehler ist</p>
<pre><code>Source/B.o(.rdata+0x0):B.cpp: multiple definition of `A&lt;B&gt;::us'
Source/Main.o(.rdata+0x0):Main.cpp: first defined here
collect2: ld returned 1 exit status
</code></pre>
<p>Jemand eine Idee, was falsch ist?</p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/146124/multiple-definition</link><generator>RSS for Node</generator><lastBuildDate>Thu, 03 Sep 2026 15:17:38 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/146124.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 04 May 2006 12:38:06 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to multiple definition on Thu, 04 May 2006 12:38:06 GMT]]></title><description><![CDATA[<p>Hi,<br />
folgendes Konstrukt:</p>
<pre><code class="language-cpp">// A.h
#ifndef A_H
#define A_H

template&lt;typename T&gt;
class A
{
public:
	static unsigned short const us;
};

#endif // A_H
</code></pre>
<pre><code class="language-cpp">// B.h
#ifndef B_H
#define B_H

#include &quot;A.h&quot;

class B : public A&lt;B&gt;
{
};

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

template&lt;&gt;
unsigned short const A&lt;B&gt;::us = 12;
</code></pre>
<p>In main wird dann einfach nur eine variable von B angelegt und auf us zugegriffen.<br />
Mit MS Visual C++ 2005 Beta ging alles problemlos. Jetzt gibts Probleme wenn ich mit dev cpp arbeite.<br />
Linker Fehler ist</p>
<pre><code>Source/B.o(.rdata+0x0):B.cpp: multiple definition of `A&lt;B&gt;::us'
Source/Main.o(.rdata+0x0):Main.cpp: first defined here
collect2: ld returned 1 exit status
</code></pre>
<p>Jemand eine Idee, was falsch ist?</p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050866</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050866</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Thu, 04 May 2006 12:38:06 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition on Thu, 04 May 2006 13:01:48 GMT]]></title><description><![CDATA[<p>Hmm ist der zweiter Compiler der gcc?</p>
<p>Kann sein, dass dieser die statische Variable beim Instanziieren der Klasse ebenenfalls instanziiert, während der MS-Compiler dies nicht tut.</p>
<p>Generell solltest du die statische Variable vielleicht besser vom Template selbst instanziieren lassen und den Wert z.B. als 2. Templateparameter übergeben...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050879</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050879</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Thu, 04 May 2006 13:01:48 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition on Thu, 04 May 2006 13:41:03 GMT]]></title><description><![CDATA[<p>Ja, der Compiler ist gcc.<br />
Prinzipiell hast du recht - ich könnte die Konstante einfach als Template Parameter übergeben. Da ich im richtigen Programm (das ist nur eine Vereinfachung) aber mehr als nur eine Konstante habe und auch eine leichte Erweiterbarkeit gegeben sein soll, ist mir dieser Weg lieber.</p>
<p>Edit: Compiler ist natürlich g++ <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="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1050887</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1050887</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Thu, 04 May 2006 13:41:03 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition on Fri, 05 May 2006 06:30:47 GMT]]></title><description><![CDATA[<blockquote>
<p>..aber mehr als nur eine Konstante</p>
</blockquote>
<p>Du hast in beiden Fällen für jede Ausprägung eine statische Variable. Bei dir ist allerdings nur die Deklaration im Template enthalten, so dass du die Variable nochmal für jede Ausprägung separat instanziieren musst.<br />
(unschön und überflüssig)</p>
<p>g++ instanziiert wenn ich mich recht entsinne statische Variablen von basistypen automatisch. Der MS-Compiler macht das nicht.</p>
<p>Ich hoffe dies hier funktioniert mit beiden Compilern:</p>
<pre><code class="language-cpp">template &lt;class T, int Value = 12&gt;
class TBeispiel
{
  static int sm_Beispiel; 
} 

int TBeispiel&lt;T, Value&gt;::sm_Beispiel = Value;
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1051197</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1051197</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 05 May 2006 06:30:47 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition on Fri, 05 May 2006 07:41:52 GMT]]></title><description><![CDATA[<p>Eigentlich sieht das so ok aus. Wie sieht denn die main.cpp aus?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1051240</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1051240</guid><dc:creator><![CDATA[Ponto]]></dc:creator><pubDate>Fri, 05 May 2006 07:41:52 GMT</pubDate></item><item><title><![CDATA[Reply to multiple definition on Fri, 05 May 2006 17:16:07 GMT]]></title><description><![CDATA[<p>ok, problem scheint geloest. Irgendwo schrieb mal jemand, dass es probleme gab, wenn man die header direkt mit im Projekt hat o_O</p>
<p>Thx für die Antworten.</p>
<p>Gruss,<br />
DeSoVoDaMu</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1051702</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1051702</guid><dc:creator><![CDATA[DeSoVoDaMu]]></dc:creator><pubDate>Fri, 05 May 2006 17:16:07 GMT</pubDate></item></channel></rss>