<?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[Initialisierungsreihenfolge von statischen Variablen]]></title><description><![CDATA[<p>Hi,</p>
<p>folgender Code führt zur Problemen zur Laufzeit, da num_steps = 0 gilt:</p>
<pre><code class="language-cpp">//Servo.cpp
const unsigned int Servo :: max_value = 90;
const unsigned int Servo :: min_value = 0;
const unsigned int Servo :: num_steps = (max_value - min_value) / step_size + 1;
const double Servo :: step_size = 45;

//Action.cpp
const unsigned int Action::num_actions = 12*Servo::num_steps;
</code></pre>
<p>Das Problem ist, dass num_actions vor num_steps initialisiert wird und dadurch num_actions = 0 gilt. Soweit ich gegoogelt habe, liegt das daran, dass im C++-Standard dafür keine Reihenfolge definiert ist.<br />
Leider habe ich keine wirklich praktikable Lösung gefunden. Anscheinend kann man das Problem mit statischen Funktionen lösen, jedoch haben alle Beispiele die ich gefunden habe sich immer auf Konstruktoren bezogen.<br />
Hat jemand eine Idee / Beispiel wie man das einfach machen kann?</p>
<p>Gruß</p>
<p>Pille</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/307890/initialisierungsreihenfolge-von-statischen-variablen</link><generator>RSS for Node</generator><lastBuildDate>Thu, 06 Aug 2026 15:02:43 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/307890.rss" rel="self" type="application/rss+xml"/><pubDate>Fri, 07 Sep 2012 22:08:53 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Initialisierungsreihenfolge von statischen Variablen on Fri, 07 Sep 2012 22:08:53 GMT]]></title><description><![CDATA[<p>Hi,</p>
<p>folgender Code führt zur Problemen zur Laufzeit, da num_steps = 0 gilt:</p>
<pre><code class="language-cpp">//Servo.cpp
const unsigned int Servo :: max_value = 90;
const unsigned int Servo :: min_value = 0;
const unsigned int Servo :: num_steps = (max_value - min_value) / step_size + 1;
const double Servo :: step_size = 45;

//Action.cpp
const unsigned int Action::num_actions = 12*Servo::num_steps;
</code></pre>
<p>Das Problem ist, dass num_actions vor num_steps initialisiert wird und dadurch num_actions = 0 gilt. Soweit ich gegoogelt habe, liegt das daran, dass im C++-Standard dafür keine Reihenfolge definiert ist.<br />
Leider habe ich keine wirklich praktikable Lösung gefunden. Anscheinend kann man das Problem mit statischen Funktionen lösen, jedoch haben alle Beispiele die ich gefunden habe sich immer auf Konstruktoren bezogen.<br />
Hat jemand eine Idee / Beispiel wie man das einfach machen kann?</p>
<p>Gruß</p>
<p>Pille</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2249500</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249500</guid><dc:creator><![CDATA[Pille456]]></dc:creator><pubDate>Fri, 07 Sep 2012 22:08:53 GMT</pubDate></item><item><title><![CDATA[Reply to Initialisierungsreihenfolge von statischen Variablen on Sat, 08 Sep 2012 00:00:54 GMT]]></title><description><![CDATA[<p>Statische integrale Konstanten... die kannst du direkt in der Klassendefinition initialisieren:</p>
<pre><code class="language-cpp">//----------------------------------------------------------------------------
// Servo.hpp

class Servo
{
...
static const unsigned int max_value = 90;
static const unsigned int min_value = 0;
static const unsigned int num_steps = (max_value - min_value) / step_size + 1;
static const double step_size; // nicht integral, C++03 erlaubt daher hier keine initialisierung (C++11 schon)
};

//----------------------------------------------------------------------------
// Servo.cpp

const unsigned int Servo :: max_value; // nur nötig wenn die konstante mal als lvalue verwendet wird
const unsigned int Servo :: min_value; // --&quot;&quot;--
const unsigned int Servo :: num_steps; // --&quot;&quot;--
const double Servo :: step_size = 45; // immer nötig

//----------------------------------------------------------------------------
// Action.hpp

#include &quot;Servo.hpp&quot;

class Action
{
...
static const unsigned int num_actions = 12 * Servo::num_steps;
...
};

//----------------------------------------------------------------------------
// Action.cpp

const unsigned int Action::num_actions; // nur nötig wenn die konstante mal als lvalue verwendet wird
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2249506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2249506</guid><dc:creator><![CDATA[hustbaer]]></dc:creator><pubDate>Sat, 08 Sep 2012 00:00:54 GMT</pubDate></item></channel></rss>