<?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[Alles in Enum durchgehen]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe vor einen ungewöhnlichen Problem. Ich habe festgestellt, dass in einer Klasse, die ich verwebnde ein enum definiert ist, der aber je nach Betriebssystem unterschiedlich ist.</p>
<pre><code class="language-cpp">// Linux
enum Bereich {
  vorne = 1,
  hinten,
  links,
  rechts,
  oben,
  unten
};
// Windows
enum Bereich {
  vorne = 5,
  hinten = 10,
  links = 15,
  rechts = 20
}
// Mac
enum Bereich {
  vorne = 7,
  hinten,
  links,
  rechts,
  oben,
  unten
}
</code></pre>
<p>Wieso das so ist? Ich weiß es nicht, aber die Klasse arbeitet super und tut die Dienste. Jetzt müsste ich für jeden Bereich eine Farbe definieren.</p>
<pre><code class="language-cpp">class A {
  void ColorSet(unsigned int&amp; bereich, const Farbe&amp; f);
}

main ()
{
  for (? enum Bereich ?)
  {
    a-&gt;ColorSet(-bereich-,RED);
  }
}
</code></pre>
<p>Unter Windows kann man &quot;oben&quot; und &quot;unten&quot; nicht definieren, da gibt es Standardwerte.</p>
<p>Ich hab jetzt schon einiges versucht, aber ich finde keinen Weg um festzustellen, ob eine Zahl in einem enum enthalten ist (sprich ist 11 gültig für Bereich falls cast) oder den höchsten und niedrigsten Wert (unter Linux 1 und 6, unter Windows 5 und 20). Ich vermute mal, es geht nicht, aber ich wollte doch mal kurz nachfragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/248937/alles-in-enum-durchgehen</link><generator>RSS for Node</generator><lastBuildDate>Wed, 16 Sep 2026 17:38:26 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/248937.rss" rel="self" type="application/rss+xml"/><pubDate>Mon, 31 Aug 2009 14:30:41 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Alles in Enum durchgehen on Mon, 31 Aug 2009 14:30:41 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich stehe vor einen ungewöhnlichen Problem. Ich habe festgestellt, dass in einer Klasse, die ich verwebnde ein enum definiert ist, der aber je nach Betriebssystem unterschiedlich ist.</p>
<pre><code class="language-cpp">// Linux
enum Bereich {
  vorne = 1,
  hinten,
  links,
  rechts,
  oben,
  unten
};
// Windows
enum Bereich {
  vorne = 5,
  hinten = 10,
  links = 15,
  rechts = 20
}
// Mac
enum Bereich {
  vorne = 7,
  hinten,
  links,
  rechts,
  oben,
  unten
}
</code></pre>
<p>Wieso das so ist? Ich weiß es nicht, aber die Klasse arbeitet super und tut die Dienste. Jetzt müsste ich für jeden Bereich eine Farbe definieren.</p>
<pre><code class="language-cpp">class A {
  void ColorSet(unsigned int&amp; bereich, const Farbe&amp; f);
}

main ()
{
  for (? enum Bereich ?)
  {
    a-&gt;ColorSet(-bereich-,RED);
  }
}
</code></pre>
<p>Unter Windows kann man &quot;oben&quot; und &quot;unten&quot; nicht definieren, da gibt es Standardwerte.</p>
<p>Ich hab jetzt schon einiges versucht, aber ich finde keinen Weg um festzustellen, ob eine Zahl in einem enum enthalten ist (sprich ist 11 gültig für Bereich falls cast) oder den höchsten und niedrigsten Wert (unter Linux 1 und 6, unter Windows 5 und 20). Ich vermute mal, es geht nicht, aber ich wollte doch mal kurz nachfragen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769834</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769834</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 31 Aug 2009 14:30:41 GMT</pubDate></item><item><title><![CDATA[Reply to Alles in Enum durchgehen on Mon, 31 Aug 2009 14:53:48 GMT]]></title><description><![CDATA[<p>Du weisst es aber zur Kompilierzeit. Sprich kannst du die gleichen Schalter benutzen, wie die für Linux, Windows und Mac und so einfach entscheiden, welche und wieviele es sind.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769847</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Mon, 31 Aug 2009 14:53:48 GMT</pubDate></item><item><title><![CDATA[Reply to Alles in Enum durchgehen on Mon, 31 Aug 2009 14:59:59 GMT]]></title><description><![CDATA[<p>Naja, so mach ich es auch derzeit. Ist halt ne Menge schreibarbeit. Aber wenn es sein muss.</p>
<p>Was passiert eigentlich bei folgendem Code.</p>
<pre><code class="language-cpp">enum Bereich {
  vorne = 1,
  hinten = 3
}
main ()
{
  for (size_t i = 1; i&lt;=3 ; i++)
  {
    Bereich b = static_cast&lt;Bereich&gt;(i);
  }
}
</code></pre>
<p>Gibt es eine Möglichkeit abzufragen ob der cast klapt? Er dürfte ja nur bei 1 und 3 Erfolg haben zu casten. Und ansonsten müsste doch eigentlich irgend ne exeption geworfen werden. Wenn ich das allerdings teste, dann passiert irgendwie kein Fehler. Kann mir das jemand erklären?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769851</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769851</guid><dc:creator><![CDATA[stefanjann]]></dc:creator><pubDate>Mon, 31 Aug 2009 14:59:59 GMT</pubDate></item><item><title><![CDATA[Reply to Alles in Enum durchgehen on Mon, 31 Aug 2009 17:36:54 GMT]]></title><description><![CDATA[<pre><code class="language-cpp">enum Bereich
{
	vorne = 1,
	hinten = 3
};

#include &lt;iostream&gt;

std::ostream&amp; operator&lt;&lt; (std::ostream &amp;s, Bereich out)
{
	return s &lt;&lt; &quot;enum &quot; &lt;&lt; (int)out;
}

int main()
{
	for (size_t i = 1; i != 5; ++i)
	{
		Bereich b = static_cast&lt;Bereich&gt;(i);
		std::cout &lt;&lt; b &lt;&lt; std::endl;
	}
}
</code></pre>
<p>funktioniert bei mir anstandslos - leider &gt;&lt;<br />
wird aber vermutlich unter implementation defined fallen...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769941</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769941</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Mon, 31 Aug 2009 17:36:54 GMT</pubDate></item><item><title><![CDATA[Reply to Alles in Enum durchgehen on Mon, 31 Aug 2009 18:15:37 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit abzufragen ob der cast klapt?</p>
</blockquote>
<p>Der Cast hat ein definiertes Verhalten, wenn das Argument (in diesem Fall) zwischen einschließlich 0 und 3 liegt, andernfalls ist es undefiniert. Es muss nicht zu jedem Wert, den eine Aufzählungsvariable annehmen kann, eine entsprechende Aufzählungskonstante existieren.<br />
Die Allgemeinen Grenzen sind etwas umständlich zu beschreiben (Standard 7.2). Die zulässigen Werte sind diejenigen, die das kleinste Bitfeld, das alle Aufzählungskonstanten darstellen kann, annehmen kann.</p>
<pre><code class="language-cpp">enum { x = 90 };
</code></pre>
<p>Die größte Konstante ist hier 90 (der kleinste 0, da kein negativer Wert aufgeführt wurde), dafür benötigen wir 7 bit, folglich ist der größte Wert, den wir verwenden dürften 2^7-1=127.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769968</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769968</guid><dc:creator><![CDATA[camper]]></dc:creator><pubDate>Mon, 31 Aug 2009 18:15:37 GMT</pubDate></item><item><title><![CDATA[Reply to Alles in Enum durchgehen on Mon, 31 Aug 2009 18:16:11 GMT]]></title><description><![CDATA[<p>stefanjann schrieb:</p>
<blockquote>
<p>Gibt es eine Möglichkeit abzufragen ob der cast klapt? Er dürfte ja nur bei 1 und 3 Erfolg haben zu casten. Und ansonsten müsste doch eigentlich irgend ne exeption geworfen werden. Wenn ich das allerdings teste, dann passiert irgendwie kein Fehler. Kann mir das jemand erklären?</p>
</blockquote>
<p>Es wird garantiert keine Exception geworfen. Im Gegensatz zu dynamischeren Sprachen wie Java sind Enum-Konstanten zur Laufzeit nicht existent, es gibt auch keine Laufzeitprüfung oder sowas. Das bedeutet, man kommt weder an deren Namen, noch an alle Enumeratoren eines <code>enums</code> . Das einzige, was man hat, ist eine Zahl von einem Integertypen, der sicher gross genug ist, um alle Enumeratoren zu repräsentieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1769969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1769969</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Mon, 31 Aug 2009 18:16:11 GMT</pubDate></item></channel></rss>