<?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[Konstanten definieren]]></title><description><![CDATA[<p>hallo,</p>
<p>wie definiert man konstanten am besten?</p>
<pre><code class="language-cpp">#define MATH_CONST_E  2.718281828459045235360287471352662 // e
#define MATH_CONST_PI 3.1415926535897932384626433832795   // pi
</code></pre>
<pre><code class="language-cpp">namespace MyMathConsts {

static const T E  = 2.718281828459045235360287471352662;
static const T Pi = 3.1415926535897932384626433832795;

} // namespace
</code></pre>
<p>bei der zweiten variante meckert der compiler dann allerdings (sind im header deklariert), dass &quot;initialisierte daten im header nicht erzeugt werden können&quot;. wie kann man das durch ne andere deklaration unterbinden?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/125190/konstanten-definieren</link><generator>RSS for Node</generator><lastBuildDate>Mon, 24 Aug 2026 05:28:10 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/125190.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 04 Nov 2005 09:18:21 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 09:18:21 GMT]]></title><description><![CDATA[<p>hallo,</p>
<p>wie definiert man konstanten am besten?</p>
<pre><code class="language-cpp">#define MATH_CONST_E  2.718281828459045235360287471352662 // e
#define MATH_CONST_PI 3.1415926535897932384626433832795   // pi
</code></pre>
<pre><code class="language-cpp">namespace MyMathConsts {

static const T E  = 2.718281828459045235360287471352662;
static const T Pi = 3.1415926535897932384626433832795;

} // namespace
</code></pre>
<p>bei der zweiten variante meckert der compiler dann allerdings (sind im header deklariert), dass &quot;initialisierte daten im header nicht erzeugt werden können&quot;. wie kann man das durch ne andere deklaration unterbinden?</p>
<p>danke</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907893</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907893</guid><dc:creator><![CDATA[Gast1]]></dc:creator><pubDate>Fri, 04 Nov 2005 09:18:21 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 09:20:46 GMT]]></title><description><![CDATA[<p>Im Header die Konstanten deklarieren und in der Cpp-Datei erst definieren.<br />
<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/907898</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907898</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 04 Nov 2005 09:20:46 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 09:22:55 GMT]]></title><description><![CDATA[<p>In C++ besser mit const. Wegen der Mehrfachdefinition würde ich aber sowas vorschlagen:</p>
<pre><code class="language-cpp">//myMath.h:
namespace MathConsts
{
  extern const double E;
  extern const double PI;
}

//myMath.cpp:
#include &quot;myMath.h&quot;
namespace MathConsts
{
  const double E =2.718;
  const double PI=3.142;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/907902</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907902</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 Nov 2005 09:22:55 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 09:23:23 GMT]]></title><description><![CDATA[<p>und das darf ich dann in jeder cpp-date neu machen oder wie stellst du dir das vor?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907903</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907903</guid><dc:creator><![CDATA[Gast1]]></dc:creator><pubDate>Fri, 04 Nov 2005 09:23:23 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 09:28:38 GMT]]></title><description><![CDATA[<p>sorry stand wohl grad aufm schlauch... <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="🙂"
    /> thx</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907910</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907910</guid><dc:creator><![CDATA[Gast1]]></dc:creator><pubDate>Fri, 04 Nov 2005 09:28:38 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 09:28:57 GMT]]></title><description><![CDATA[<p>Nein, das machst du in genau EINER CPP-Datei (am besten die, die auch die Funktionen deiner Bibliothek definiert). Alle anderen Dateien binden lediglich den Header ein - und der Linker findet die richtige Konstante.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/907911</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/907911</guid><dc:creator><![CDATA[CStoll]]></dc:creator><pubDate>Fri, 04 Nov 2005 09:28:57 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 10:29:40 GMT]]></title><description><![CDATA[<p>Gast1 schrieb:</p>
<blockquote>
<p>hallo,</p>
<p>wie definiert man konstanten am besten?</p>
<pre><code class="language-cpp">#define MATH_CONST_E  2.718281828459045235360287471352662 // e
#define MATH_CONST_PI 3.1415926535897932384626433832795   // pi
</code></pre>
<pre><code class="language-cpp">namespace MyMathConsts {

static const T E  = 2.718281828459045235360287471352662;
static const T Pi = 3.1415926535897932384626433832795;

} // namespace
</code></pre>
<p>bei der zweiten variante meckert der compiler dann allerdings (sind im header deklariert), dass &quot;initialisierte daten im header nicht erzeugt werden können&quot;. wie kann man das durch ne andere deklaration unterbinden?</p>
<p>danke</p>
</blockquote>
<p>selbstverständlich dürfen konstanten in headern definiert werden, und kein compiler wird dir eine derartige fehlermeldung um die ohren hauen (poste doch mal die exakte fehlermeldung) - schonmal weil es den begriff header in der sprachdefinition gar nicht gibt (der taucht erst bei der standardbibliothek auf).<br />
anzumerken wäre, dass das static überflüssig ist, denn const impliziert internal linkage (es sei denn es gab vorher eine extern deklaration). nun bedeutet das allerdings, dass jede ÜE ihre eigene kopie der konstanten erzeugt, wenn eine solche out-of-line kopie in dieser ÜE benötigt wird. bei zahlenkonstanten ist das i.d.R. aber nicht der fall - und konstanten hier bereits im header zu definieren ist definitv die bessere lösung, da so viele (sub-)ausdrücke konstant werden und bereits beim kompilieren ausgewertet werden können. komplizierter wird es, sobald die zu definierende konstant kein pod ist, oder nicht durch einen konstanten ausdruck initilisiert werden soll, das ist hier aber nicht der fall.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/908000</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/908000</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Nov 2005 10:29:40 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 10:37:47 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/6642">@camper</a><br />
Gibt Compiler, die Konstantendefinitionen innerhalb von Header-Dateien in manchen Kombinationen nicht mögen. Der VC-Compiler z.B. mag Kontantendefinitionen innerhalb von Klassendeklarationen nicht. Jedenfalls in der 6er Version und in der 2003er glaub ich auch. Kann deshalb sein, dass er diese auch in namespaces nicht mag.<br />
<img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f61e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--disappointed_face"
      title=":("
      alt="😞"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/908007</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/908007</guid><dc:creator><![CDATA[Mathias]]></dc:creator><pubDate>Fri, 04 Nov 2005 10:37:47 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 10:52:16 GMT]]></title><description><![CDATA[<p>konstanten in klassen sind eine völlig andere geschichte, davon war hier überhaupt nicht die rede. member einer klasse (ob static oder nicht) haben stets external linkage - demzufolge würde eine definion der konstanten in headern leicht zur verletzung der ODR führen. ausnahmsweise darf man nur integrale statische konstanen in der klassendefinition direkt (nur mit konstanten ausdrücken? bin mir da jetzt nicht sicher - aber nur in diesem fall wird man es wollen) definieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/908015</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/908015</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Nov 2005 10:52:16 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 13:26:24 GMT]]></title><description><![CDATA[<p>habe mir jetzt noch mal die compiler-optionen angeschaut und bemerkt, dass ich &quot;vorkompilierte header verwenden&quot; (borland c++ builder) aktiviert hatte, wodurch dieser fehler (eigentlich ne warnung) generiert wird. wenn ich keine vorkompilierten header verwende (compilezeit wird dadurch laenger) dann wird auch keine warnung mehr ausgegeben, wenn ich die konstanten im header deklariere.</p>
<p>vielen dank fuer eure hilfe!</p>
]]></description><link>https://www.c-plusplus.net/forum/post/908147</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/908147</guid><dc:creator><![CDATA[Gast1]]></dc:creator><pubDate>Fri, 04 Nov 2005 13:26:24 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 13:57:35 GMT]]></title><description><![CDATA[<p>Man sagte früher, dass die zweite besser wär, den die Compiler Präprozessor Direktiven sind eigendlich kein C++. Man bekommt aber heute keine Probleme mehr mit ihnen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/908174</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/908174</guid><dc:creator><![CDATA[Tc++H]]></dc:creator><pubDate>Fri, 04 Nov 2005 13:57:35 GMT</pubDate></item><item><title><![CDATA[Reply to Konstanten definieren on Fri, 04 Nov 2005 14:55:09 GMT]]></title><description><![CDATA[<p>Tc++H schrieb:</p>
<blockquote>
<p>Man sagte früher, dass die zweite besser wär, den die Compiler Präprozessor Direktiven sind eigendlich kein C++.</p>
</blockquote>
<p>unsinn.</p>
<blockquote>
<p>Man bekommt aber heute keine Probleme mehr mit ihnen.</p>
</blockquote>
<p>na sowas. was früher ein problem war, ist also heute keins mehr?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/908229</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/908229</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Fri, 04 Nov 2005 14:55:09 GMT</pubDate></item></channel></rss>