<?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[Konstruktor mit &amp;quot;enum&amp;quot; Parameter]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe ein &quot;kleines&quot; Problem mit einem Konstruktor der einen enum als Parameter hat: Objekte dynamisch erzeugen klappt wunderbar, wenn ich allerdings ein statisches Objekt erzeugen will bekomme ich einen Compilerfehler:</p>
<pre><code class="language-cpp">class Foo {
public
   enum E{
      A,
      B
   };

   Foo(E type) {...}
}; 

class Bar {
public:
   Bar();
private:
   Foo* foo;
};

Bar::Bar() :
   foo(new Foo(Foo::A)) // &lt;- DAS funktioniert
{}

...

class Bar{
public:
   Bar();
private:
   static Foo foo(Foo::A); // &lt;- g++ &quot;error: Foo::A is not a type&quot;
};
</code></pre>
<p>Ich steh ein wenig auf dem Schlauch, daher zwei Fragen:</p>
<p>1. Warum beschwert sich der Compiler? Ist mir ehrlich gesagt nicht ganz klar.<br />
2. Wie kann ich das Problem loesen? Ist es ueberhaupt moeglich mit diesem ctor Objekte statisch zu erzeugen?</p>
<p>Danke schonmal fuer eure Hinweise <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/topic/253495/konstruktor-mit-quot-enum-quot-parameter</link><generator>RSS for Node</generator><lastBuildDate>Sun, 13 Sep 2026 16:49:01 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/253495.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 03 Nov 2009 09:34:05 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Konstruktor mit &amp;quot;enum&amp;quot; Parameter on Tue, 03 Nov 2009 09:34:05 GMT]]></title><description><![CDATA[<p>Hallo zusammen!</p>
<p>Ich habe ein &quot;kleines&quot; Problem mit einem Konstruktor der einen enum als Parameter hat: Objekte dynamisch erzeugen klappt wunderbar, wenn ich allerdings ein statisches Objekt erzeugen will bekomme ich einen Compilerfehler:</p>
<pre><code class="language-cpp">class Foo {
public
   enum E{
      A,
      B
   };

   Foo(E type) {...}
}; 

class Bar {
public:
   Bar();
private:
   Foo* foo;
};

Bar::Bar() :
   foo(new Foo(Foo::A)) // &lt;- DAS funktioniert
{}

...

class Bar{
public:
   Bar();
private:
   static Foo foo(Foo::A); // &lt;- g++ &quot;error: Foo::A is not a type&quot;
};
</code></pre>
<p>Ich steh ein wenig auf dem Schlauch, daher zwei Fragen:</p>
<p>1. Warum beschwert sich der Compiler? Ist mir ehrlich gesagt nicht ganz klar.<br />
2. Wie kann ich das Problem loesen? Ist es ueberhaupt moeglich mit diesem ctor Objekte statisch zu erzeugen?</p>
<p>Danke schonmal fuer eure Hinweise <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/1802552</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802552</guid><dc:creator><![CDATA[schwudde]]></dc:creator><pubDate>Tue, 03 Nov 2009 09:34:05 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit &amp;quot;enum&amp;quot; Parameter on Tue, 03 Nov 2009 10:12:54 GMT]]></title><description><![CDATA[<p>du kannst statische Variablen in klassen nicht direkt initialisieren/definieren, sondern nur deklarieren. (Ausnahme sind integrale typen)</p>
<pre><code class="language-cpp">class Foo {
public
   enum E{
      A,
      B
   };

   Foo(E type) {...}
};

class Bar {
public:
   Bar();
private:
   Foo* foo;
};

class Bar{
public:
   Bar();
private:
   static Foo foo;
}; 

Foo Bar::foo(Foo::A); //definition in .cpp
</code></pre>
<p>Die Fehlermeldung ist allerdings reichlich irreführend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802572</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802572</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 03 Nov 2009 10:12:54 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit &amp;quot;enum&amp;quot; Parameter on Tue, 03 Nov 2009 12:57:18 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Die Fehlermeldung ist allerdings reichlich irreführend.</p>
</blockquote>
<p>Naja, der Compiler sieht an der Stelle (verständlicherweise) eine Funktionsdeklaration. Und in dem Kontext betrachtet ist die Fehlermeldung tatsächlich genau auf den Punkt...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1802646</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802646</guid><dc:creator><![CDATA[dooooomi]]></dc:creator><pubDate>Tue, 03 Nov 2009 12:57:18 GMT</pubDate></item><item><title><![CDATA[Reply to Konstruktor mit &amp;quot;enum&amp;quot; Parameter on Tue, 03 Nov 2009 13:54:44 GMT]]></title><description><![CDATA[<p>dooooomi schrieb:</p>
<blockquote>
<p>pumuckl schrieb:</p>
<blockquote>
<p>Die Fehlermeldung ist allerdings reichlich irreführend.</p>
</blockquote>
<p>Naja, der Compiler sieht an der Stelle (verständlicherweise) eine Funktionsdeklaration. Und in dem Kontext betrachtet ist die Fehlermeldung tatsächlich genau auf den Punkt...</p>
</blockquote>
<p>Klar sieht er die - aber in dem gegebenen Kontext, dass man eine Variable haben möchte und garnicht unbedingt schnallt dass das als Funktionsdeklaration geparst wird, ist sie irreführend. Ähnlich wie bei dem Standardfehler, bei der Definition eines neuen Objektes mit default-ctor dessen Klammern anzugeben, was als Funktionsdeklaration geparst wird:</p>
<pre><code class="language-cpp">class Foo
{
  Foo() {}
};
int main()
{
  Foo f(); //ups, wieso spuckt der Compiler für mein Objekt f ne Warnmeldug über Funktionen aus? (wenn überhaupt)
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1802665</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1802665</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Tue, 03 Nov 2009 13:54:44 GMT</pubDate></item></channel></rss>