<?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[Enumeration in Struct]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>in meinem Projekt möchte ich gerne mehrere Enumerations global deklarieren, die teilweise die gleichen Bezeichnungen enthalten, z.B.:</p>
<pre><code>enum A{eins, zwei};
enum B{eins, zwei, drei};
</code></pre>
<p>Das macht allerdings, wie ich festgestellt habe Probleme, da sich A und B in die Quere kommen.<br />
Nun habe ich in einem Beitrag den Tipp gefunden, die enums einfach in einem Struct zu &quot;verstecken&quot;, um das Problem zu umgehen. Das habe ich mal in einem einfachen Beispiel versucht:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

struct LIST {
	enum NUMBERS {one, two};
	NUMBERS count;
};

int main(){
	LIST a;
	a.count=one;
	return 0;
}
</code></pre>
<p>Aber irgendwie gefällt auch dieser Code dem Compiler nicht:</p>
<p>Fehler: »one« wurde in diesem Gültigkeitsbereich nicht definiert</p>
<p>Meine Frage also:<br />
Wie bekomme ich es jetzt hin, dass ich count auch außerhalb von LIST benutzen kann, ohne NUMBERS direkt global deklarieren zu müssen?<br />
Oder gibt es vielleicht eine elegantere Lösung für das ursprüngliche Problem?</p>
<p>Vielen Dank schonmal für eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/topic/324813/enumeration-in-struct</link><generator>RSS for Node</generator><lastBuildDate>Tue, 14 Jul 2026 06:16:37 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/324813.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 03 Apr 2014 08:43:57 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Enumeration in Struct on Thu, 03 Apr 2014 08:43:57 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>in meinem Projekt möchte ich gerne mehrere Enumerations global deklarieren, die teilweise die gleichen Bezeichnungen enthalten, z.B.:</p>
<pre><code>enum A{eins, zwei};
enum B{eins, zwei, drei};
</code></pre>
<p>Das macht allerdings, wie ich festgestellt habe Probleme, da sich A und B in die Quere kommen.<br />
Nun habe ich in einem Beitrag den Tipp gefunden, die enums einfach in einem Struct zu &quot;verstecken&quot;, um das Problem zu umgehen. Das habe ich mal in einem einfachen Beispiel versucht:</p>
<pre><code>#include &lt;iostream&gt;

using namespace std;

struct LIST {
	enum NUMBERS {one, two};
	NUMBERS count;
};

int main(){
	LIST a;
	a.count=one;
	return 0;
}
</code></pre>
<p>Aber irgendwie gefällt auch dieser Code dem Compiler nicht:</p>
<p>Fehler: »one« wurde in diesem Gültigkeitsbereich nicht definiert</p>
<p>Meine Frage also:<br />
Wie bekomme ich es jetzt hin, dass ich count auch außerhalb von LIST benutzen kann, ohne NUMBERS direkt global deklarieren zu müssen?<br />
Oder gibt es vielleicht eine elegantere Lösung für das ursprüngliche Problem?</p>
<p>Vielen Dank schonmal für eure Hilfe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f60b.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_savoring_food"
      title=":yum:"
      alt="😋"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392506</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392506</guid><dc:creator><![CDATA[Mr.Jones]]></dc:creator><pubDate>Thu, 03 Apr 2014 08:43:57 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration in Struct on Thu, 03 Apr 2014 08:49:03 GMT]]></title><description><![CDATA[<p>hallo.</p>
<p>die lösung für deine variante wäre:</p>
<pre><code>struct LIST // Todo: Capslock entfernen, sonst denkt jeder, dass es ein Makro ist
{
    enum NUMBERS {one, two};
    NUMBERS count;
};

int main()
{
    LIST a; // Todo: Konstruktor implementieren
    a.count = LIST::one; // Todo: Zuweisungsoperator definieren um auf .count verzichen zu können
    // return 0; Wird auch implizit gemacht in C++
}
</code></pre>
<p>in c++11 gibt es <a href="http://www.cprogramming.com/c++11/c++11-nullptr-strongly-typed-enum-class.html" rel="nofollow">strongly typed enums</a>.</p>
<p>in c++03 gibt es das <a href="http://en.wikibooks.org/wiki/More_C%2B%2B_Idioms/Type_Safe_Enum" rel="nofollow">safe enum idiom</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392509</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392509</guid><dc:creator><![CDATA[Fytch]]></dc:creator><pubDate>Thu, 03 Apr 2014 08:49:03 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration in Struct on Thu, 03 Apr 2014 09:50:30 GMT]]></title><description><![CDATA[<p>Vielen Dank für deine Hilfe asfdlol,hatte schon befürchtet es niemals hinzubekommen, aber jetzt funktioniert das Beispielprogramm. Jetzt muss ich es nur noch auf mein Projekt übertragen, aber ich bin zuversichtlich <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/2392529</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392529</guid><dc:creator><![CDATA[Mr.Jones]]></dc:creator><pubDate>Thu, 03 Apr 2014 09:50:30 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration in Struct on Thu, 03 Apr 2014 15:49:29 GMT]]></title><description><![CDATA[<p>Ich muss wohl doch nochmal eure Hilfe in Anspruch nehmen. Ich hab das Beispiel jetzt noch ein wenig weiter geschrieben und bin hier angekommen:</p>
<pre><code>#include &lt;iostream&gt;
#include&lt;string.h&gt;

using namespace std;

enum figures {one, two, three};

struct list {
	enum NUMBERS {one, two, three} count;
};

std::string function(list::NUMBERS param){
	switch(param){
		case list::one:return&quot;one&quot;;
		case list::two:return&quot;two&quot;;
		default: return&quot;Fehler&quot;;
	}
}

std::string pattern( figures element){
	switch(element){
		case one: return&quot;one&quot;;
		case two: return&quot;two&quot;;
		case three: return&quot;three&quot;;
		default: return&quot;No element&quot;;
	}
}

int main(){
	cout&lt;&lt;&quot;Function:&quot;&lt;&lt;function(list::one)&lt;&lt;endl;
	cout&lt;&lt;&quot;Pattern: &quot;&lt;&lt;pattern(one)&lt;&lt;endl;
}
</code></pre>
<p>Soweit alles schön und gut, aber mich stört, dass ich in Zeile 31 immer noch list:: verwenden muss. Ich möchte gerne so, wie in der Vorlage (Pattern) nur das Element eingeben müssen.</p>
<p>Also meine Frage:<br />
Weis jemand, wie ich hinbekomme, dass die Eingaben für meine Übergabeparameter von function und pattern die gleichen sind (also function(one))?</p>
<p>Danke schon mal <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44d.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_up"
      title=":+1:"
      alt="👍"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392589</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392589</guid><dc:creator><![CDATA[Mr.Jones]]></dc:creator><pubDate>Thu, 03 Apr 2014 15:49:29 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration in Struct on Fri, 04 Apr 2014 11:59:09 GMT]]></title><description><![CDATA[<p>Ich verpacke enums häufig in eigene Namespaces, das sieht dann so aus:</p>
<pre><code>namespace Numbers
{
   enum Numbers_t
   {
      One,
      Two,
      Three
   };
}

namespace Figures
{
   enum Figures_t
   {
      One,
      Two
   };
}

void f()
{
   using namespace Figures;

   Figures_t fig = Two;
}

int main()
{
   Figures::Figures_t fig = Figures::One;
   Numbers::Numbers_t num = Numbers::Three;
}
</code></pre>
<p>Macht den Code an manchen Stellen schöner, an anderen hässlicher. Und bedeutet etwas mehr Tipparbeit. Wo es keine Mehrdeutigkeiten gibt kann man den Namensraum per using-Direktive sichtbar machen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2392774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2392774</guid><dc:creator><![CDATA[DocShoe]]></dc:creator><pubDate>Fri, 04 Apr 2014 11:59:09 GMT</pubDate></item></channel></rss>