<?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 forward-deklarieren]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann man eigentlich eine Enumeration forward-deklarieren? Meine Versuche waren nicht erfolgreich, mein Code sieht so aus:</p>
<pre><code class="language-cpp">#ifndef ALPHABET_H_
#define ALPHABET_H_

enum StateType;

class TransAlphabet
{
public:
  void init(enum StateType transitions);
};

#endif
</code></pre>
<pre><code class="language-cpp">#include &quot;standard.h&quot;
#include &quot;error.h&quot;
#include &quot;profileHMM.h&quot;
#include &quot;alphabet.h&quot;

using namespace std;

void TransAlphabet::init(enum StateType transitions) {

}
</code></pre>
<p>und fuehrt zu der Fehlermeldung</p>
<pre><code class="language-cpp">g++ -c -Wall -ansi -pedantic -g -ggdb -O0 -DDEBUG -o alphabet.o alphabet.cpp -I /home/ingo/libs/boost/ 
In file included from alphabet.cpp:1:
alphabet.h:6: Fehler: Verwendung des enum »StateType« ohne vorherige Deklaration
alphabet.h:11: Fehler: Verwendung des enum »StateType« ohne vorherige Deklaration
alphabet.cpp:8: Fehler: Verwendung des enum »StateType« ohne vorherige Deklaration
make: *** [alphabet.o] Fehler 1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/243585/enumeration-forward-deklarieren</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 22:19:07 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243585.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 18 Jun 2009 15:19:00 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 15:19:00 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>kann man eigentlich eine Enumeration forward-deklarieren? Meine Versuche waren nicht erfolgreich, mein Code sieht so aus:</p>
<pre><code class="language-cpp">#ifndef ALPHABET_H_
#define ALPHABET_H_

enum StateType;

class TransAlphabet
{
public:
  void init(enum StateType transitions);
};

#endif
</code></pre>
<pre><code class="language-cpp">#include &quot;standard.h&quot;
#include &quot;error.h&quot;
#include &quot;profileHMM.h&quot;
#include &quot;alphabet.h&quot;

using namespace std;

void TransAlphabet::init(enum StateType transitions) {

}
</code></pre>
<p>und fuehrt zu der Fehlermeldung</p>
<pre><code class="language-cpp">g++ -c -Wall -ansi -pedantic -g -ggdb -O0 -DDEBUG -o alphabet.o alphabet.cpp -I /home/ingo/libs/boost/ 
In file included from alphabet.cpp:1:
alphabet.h:6: Fehler: Verwendung des enum »StateType« ohne vorherige Deklaration
alphabet.h:11: Fehler: Verwendung des enum »StateType« ohne vorherige Deklaration
alphabet.cpp:8: Fehler: Verwendung des enum »StateType« ohne vorherige Deklaration
make: *** [alphabet.o] Fehler 1
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1728920</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728920</guid><dc:creator><![CDATA[ingobulla]]></dc:creator><pubDate>Thu, 18 Jun 2009 15:19:00 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 15:22:36 GMT]]></title><description><![CDATA[<p>Geht leider nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728924</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728924</guid><dc:creator><![CDATA[Tachyon]]></dc:creator><pubDate>Thu, 18 Jun 2009 15:22:36 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 15:47:49 GMT]]></title><description><![CDATA[<p>Das geht deshalb nicht, weil die Größe einer Enumeration von der Anzahl der Elemente abhängig sein kann. Der kommende Standard führt die Option ein, explizit eine Enum-Größe anzugeben:</p>
<pre><code class="language-cpp">enum MyEnum : int { ... };
</code></pre>
<p>Für solche Enumerationen sind dann Forward-Deklarationen möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728938</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728938</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 18 Jun 2009 15:47:49 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 16:16:18 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Das geht deshalb nicht, weil die Größe einer Enumeration von der Anzahl der Elemente abhängig sein kann....</p>
</blockquote>
<p>Hieße das, dass das mit Zeigern/Referenzen ginge?</p>
<pre><code class="language-cpp">enum StateType;

class TransAlphabet {
public:
  void init(StateType&amp; transitions);
};
</code></pre>
<p>... oder ist das einfach so verboten?</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728944</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728944</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 18 Jun 2009 16:16:18 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 17:00:27 GMT]]></title><description><![CDATA[<p>Simon2 schrieb:</p>
<blockquote>
<p>... oder ist das einfach so verboten?</p>
</blockquote>
<p>Ich nehme an, daß es so ist. Vielleicht, weil man in der Praxis ungefähr nie einen enum-Wert per Referenz oder gar per Zeiger übergibt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728967</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728967</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 18 Jun 2009 17:00:27 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 17:06:01 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Der kommende Standard führt die Option ein, explizit eine Enum-Größe anzugeben:</p>
<pre><code class="language-cpp">enum MyEnum : int { ... };
</code></pre>
<p>Für solche Enumerationen sind dann Forward-Deklarationen möglich.</p>
</blockquote>
<p>Wieder ein weiteres sehr nettes Feature, auf das ich mich freuen kann. <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>
<p>Die nicht mögliche Vorwärtsdeklaration von <code>enum</code> s ist schon mühsam. Auch diejenige von Nested Types. Falls das auch noch einmal kommen sollte, sind wir diesbezüglich schon nahe an der Perfektion. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Edit: @ Simon2:<br />
Nur weil du nicht gerade das beste Beispiel genommen hast und das ein verbreiteter Irrtum ist:</p>
<pre><code class="language-cpp">class A; // Klassen-Vorwärsdeklaration

class B
{
    void Function(A a); // &lt;- Kopie!
};
</code></pre>
<p>Das ist sehr wohl möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728969</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728969</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 18 Jun 2009 17:06:01 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 17:04:06 GMT]]></title><description><![CDATA[<p>audacia schrieb:</p>
<blockquote>
<p>Simon2 schrieb:</p>
<blockquote>
<p>... oder ist das einfach so verboten?</p>
</blockquote>
<p>Ich nehme an, daß es so ist. Vielleicht, weil man in der Praxis ungefähr nie einen enum-Wert per Referenz oder gar per Zeiger übergibt.</p>
</blockquote>
<p>Nunja ansonsten spricht der Standard oft genug <em>kein</em> Verbot aus für Dinge, die in den allermeisten Fällen sinnlos/unüblich sind. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /><br />
Aber vielleicht kommt das Verbot noch aus früheren Zeiten.</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728971</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728971</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Thu, 18 Jun 2009 17:04:06 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 17:52:24 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>audacia schrieb:</p>
<blockquote>
<p>Der kommende Standard führt die Option ein, explizit eine Enum-Größe anzugeben:</p>
<pre><code class="language-cpp">enum MyEnum : int { ... };
</code></pre>
<p>Für solche Enumerationen sind dann Forward-Deklarationen möglich.</p>
</blockquote>
<p>Wieder ein weiteres sehr nettes Feature, auf das ich mich freuen kann. <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>
</blockquote>
<p>Mein Compiler kann das <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
<p>Nexus schrieb:</p>
<blockquote>
<p>Die nicht mögliche Vorwärtsdeklaration von <code>enum</code> s ist schon mühsam. Auch diejenige von Nested Types. Falls das auch noch einmal kommen sollte, sind wir diesbezüglich schon nahe an der Perfektion. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f609.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--winking_face"
      title=";)"
      alt="😉"
    /></p>
</blockquote>
<p>Meinst du so etwas:</p>
<pre><code class="language-cpp">class Outer
{
    struct Inner;
    Inner* theData;
};
...
struct Outer::Inner
{
    ...
};
</code></pre>
<p>Das ist bereits in aktuellem C++ möglich.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1728995</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1728995</guid><dc:creator><![CDATA[audacia]]></dc:creator><pubDate>Thu, 18 Jun 2009 17:52:24 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Thu, 18 Jun 2009 18:00:19 GMT]]></title><description><![CDATA[<p>@ audacia:<br />
Nein, ich meinte eher <a href="http://www.c-plusplus.net/forum/viewtopic-var-t-is-234000.html" rel="nofollow">sowas</a>.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729001</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729001</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Thu, 18 Jun 2009 18:00:19 GMT</pubDate></item><item><title><![CDATA[Reply to Enumeration forward-deklarieren on Fri, 19 Jun 2009 07:21:22 GMT]]></title><description><![CDATA[<p>Nexus schrieb:</p>
<blockquote>
<p>...@ Simon2:<br />
Nur weil du nicht gerade das beste Beispiel genommen hast und das ein verbreiteter Irrtum ist:</p>
<pre><code class="language-cpp">class A; // Klassen-Vorwärsdeklaration

class B
{
    void Function(A a); // &lt;- Kopie!
};
</code></pre>
<p>Das ist sehr wohl möglich.</p>
</blockquote>
<p>Du hast natürlich recht: In diesen Dingen bin ich nicht ganz sattelfest ... aber deshalb hatte ich audacias Aussage</p>
<p>audacia schrieb:</p>
<blockquote>
<p>Das geht deshalb nicht, weil die Größe einer Enumeration von der Anzahl der Elemente abhängig sein kann. ...</p>
</blockquote>
<p>in der Richtung verstanden: &quot;... und weil der Compiler an dieser Stelle die Größeinformation braucht.&quot;</p>
<p>Das erinnerte mich (wie Du vermutlich weißt) an</p>
<pre><code class="language-cpp">struct A;
struct B {
 A a;
};
</code></pre>
<p>was ja (wenn ich nicht auch das falsch in Erinnerung habe) NICHT geht.</p>
<p>Liegt dann das &quot;enum-foward-declaration-Verbot&quot; gar nicht an der fehlenden/variablen Größeninformation? Oder hat diese noch andere Auswirkungen?</p>
<p>Danke für die Aufklärung!<br />
Gleich, um diese Lücke zu schließen: Gilt das dann auch für &quot;freie&quot; Funktionen?</p>
<pre><code class="language-cpp">struct A;
void f(A a); // ?
A f();  // ?
</code></pre>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1729227</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1729227</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Fri, 19 Jun 2009 07:21:22 GMT</pubDate></item></channel></rss>