<?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[Klasse + Array + Enum]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in einer Klasse ein array definieren und für die Felder (als Index) ein Enum verwenden.</p>
<p>hier mal der Code:</p>
<pre><code class="language-cpp">enum
{
	evClicked=0,//without parameter
	evDoubleClicked,//without parameter
	evMouseDown,//parameters: mouse-button and position
	evMouseUp,//parameters: mouse-button and position
	evSelChanged,//also used for Pagecontrol-switch; without paramaters

	evMax
};

class LuaControl
{
protected:
	lua_State* L;
	int events[evMax]={0};//array for holding lua-function-pointer
public:
	LuaControl(lua_State *l): L(l) {}
};
</code></pre>
<p>wie zu erkennen ist, geht es mir um das Feld events...der Compiler zeigt mir folgende Meldungen:</p>
<blockquote>
<p>lgui.cxx:61: error: a brace-enclosed initializer is not allowed here before ‘{’ token<br />
lgui.cxx:61: error: ISO C++ forbids initialization of member ‘events’<br />
lgui.cxx:61: error: making ‘events’ static<br />
lgui.cxx:61: error: invalid in-class initialization of static data member of non-integral type ‘int [5]’</p>
</blockquote>
<p>leider kann ich mit der Fehlermeldung gar nix anfangen...außer vielleicht geht nicht <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="🙂"
    /><br />
Zeile 61 ist die &quot;int events[evMax]={0};&quot;</p>
<p>ich hoffe, jemand kann mir erklären, warum das nicht geht, was ich vorhabe und wie man es evtl umbauen könnte.</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/271892/klasse-array-enum</link><generator>RSS for Node</generator><lastBuildDate>Sat, 29 Aug 2026 06:11:12 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/271892.rss" rel="self" type="application/rss+xml"/><pubDate>Thu, 05 Aug 2010 19:15:26 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 19:15:26 GMT]]></title><description><![CDATA[<p>Hallo,</p>
<p>ich möchte in einer Klasse ein array definieren und für die Felder (als Index) ein Enum verwenden.</p>
<p>hier mal der Code:</p>
<pre><code class="language-cpp">enum
{
	evClicked=0,//without parameter
	evDoubleClicked,//without parameter
	evMouseDown,//parameters: mouse-button and position
	evMouseUp,//parameters: mouse-button and position
	evSelChanged,//also used for Pagecontrol-switch; without paramaters

	evMax
};

class LuaControl
{
protected:
	lua_State* L;
	int events[evMax]={0};//array for holding lua-function-pointer
public:
	LuaControl(lua_State *l): L(l) {}
};
</code></pre>
<p>wie zu erkennen ist, geht es mir um das Feld events...der Compiler zeigt mir folgende Meldungen:</p>
<blockquote>
<p>lgui.cxx:61: error: a brace-enclosed initializer is not allowed here before ‘{’ token<br />
lgui.cxx:61: error: ISO C++ forbids initialization of member ‘events’<br />
lgui.cxx:61: error: making ‘events’ static<br />
lgui.cxx:61: error: invalid in-class initialization of static data member of non-integral type ‘int [5]’</p>
</blockquote>
<p>leider kann ich mit der Fehlermeldung gar nix anfangen...außer vielleicht geht nicht <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="🙂"
    /><br />
Zeile 61 ist die &quot;int events[evMax]={0};&quot;</p>
<p>ich hoffe, jemand kann mir erklären, warum das nicht geht, was ich vorhabe und wie man es evtl umbauen könnte.</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936761</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936761</guid><dc:creator><![CDATA[_frank_]]></dc:creator><pubDate>Thu, 05 Aug 2010 19:15:26 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 19:21:39 GMT]]></title><description><![CDATA[<p>Das hat nix mit enums zu tun, sondern nur mit Klassen und Arrays. Du kannst allgemein ein Array einer Klasse nicht so initialisieren wir du es dort vor hast. Gerade dafür ist der Konstruktor da.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936762</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936762</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Aug 2010 19:21:39 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 19:28:35 GMT]]></title><description><![CDATA[<p>Danke für die schnelle Antwort</p>
<p>wenn ich die Initialisierung in den Constructor verlege:</p>
<pre><code class="language-cpp">LuaControl(lua_State *l): L(l) {events={0};}
</code></pre>
<p>bekomme ich nachfolgende Warnung (zumindest der error ist weg), welche ich aber auch nicht unbedingt ignorieren will...</p>
<blockquote>
<p>extended initializer lists only available with -std=c++0x or -std=gnu++0x</p>
</blockquote>
<p>wo und wie muss ich diese Option setzen?</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936765</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936765</guid><dc:creator><![CDATA[_frank_]]></dc:creator><pubDate>Thu, 05 Aug 2010 19:28:35 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 19:42:32 GMT]]></title><description><![CDATA[<p>Das ist ja auch falsches C++ (zumindest nach aktuellem Standard). Arrays musst du tatsächlich elementweise im Konstruktor initialisieren. Den ganzen Ärger hättest du übrigens nicht mit einem vernünftigen Array-Wrapper wie std::vector oder boost::array.</p>
<p>Willst du die C++0x-Features nutzen die dein Compiler offenbar schon unterstützt, dann musst du ihm eine der angegebenen Optionen einfach über die Kommandozeile mitgeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936770</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936770</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Aug 2010 19:42:32 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 19:48:03 GMT]]></title><description><![CDATA[<p>std::vector siht mir für meinen Zweck bisschen zu umfangreich aus...<br />
ich möchte einfach nur das array mit 0 initialisieren, da darin später pointer landen sollen.</p>
<p>die sache mit der Kommandozeilenoption ist sicher nicht die sauberste, nehme ich an.</p>
<p>ich vermute mal, die sinnvollste/sauberste Variante dürfte eine schleife im constructor sein, oder?</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936774</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936774</guid><dc:creator><![CDATA[_frank_]]></dc:creator><pubDate>Thu, 05 Aug 2010 19:48:03 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 20:01:29 GMT]]></title><description><![CDATA[<p><em>frank</em> schrieb:</p>
<blockquote>
<p>std::vector siht mir für meinen Zweck bisschen zu umfangreich aus...</p>
</blockquote>
<p>Na, wenn du dir das Leben schwer machen willst, ist das dein Problem <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>ich möchte einfach nur das array mit 0 initialisieren, da darin später pointer landen sollen.</p>
</blockquote>
<p>Das klingt äußerst abenteuerlich...</p>
<blockquote>
<p>die sache mit der Kommandozeilenoption ist sicher nicht die sauberste, nehme ich an.</p>
</blockquote>
<p>So lala. es ist halt durch den aktuellen Standard nicht gedeckt. Aber es wird aller Voraussicht nach bald kommen. Und es wird jetzt schon von vielen Compilern unterstützt. Aber du kannst dann dein Programm nicht mit einem Compiler übersetzen, welcher den neuen (noch nicht verabschiedeten) Standard nicht unterstützt.</p>
<blockquote>
<p>ich vermute mal, die sinnvollste/sauberste Variante dürfte eine schleife im constructor sein, oder?</p>
</blockquote>
<p>Ja, das wäre der Klassiker.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936782</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936782</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Aug 2010 20:01:29 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 20:14:46 GMT]]></title><description><![CDATA[<p>SeppJ schrieb:</p>
<blockquote>
<p>Na, wenn du dir das Leben schwer machen willst, ist das dein Problem <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>hab nurmal grob <a href="http://www.cplusplus.com/reference/stl/vector/" rel="nofollow">das hier</a> überflogen...schaut komplizierter aus, als wenn ich das array in ner schleife initialisiere...möchte den code schließlich auch verstehen <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>SeppJ schrieb:</p>
<blockquote>
<p>Das klingt äußerst abenteuerlich...</p>
</blockquote>
<p>wüsste nicht wie ich es machen soll, da diese Pointer die callback-Adressen eines LUA-Scripts sind.</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936791</guid><dc:creator><![CDATA[_frank_]]></dc:creator><pubDate>Thu, 05 Aug 2010 20:14:46 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 20:39:01 GMT]]></title><description><![CDATA[<p><em>frank</em> schrieb:</p>
<blockquote>
<p>wüsste nicht wie ich es machen soll, da diese Pointer die callback-Adressen eines LUA-Scripts sind.</p>
</blockquote>
<p>Es würde schonmal mal helfen, wenn das Array ein Array von Pointern wäre...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936805</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936805</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Aug 2010 20:39:01 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 22:50:51 GMT]]></title><description><![CDATA[<p>also &quot;int *events[evMax]&quot;, da es ja untypisierte pointer sind, richtig?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936845</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936845</guid><dc:creator><![CDATA[_frank_]]></dc:creator><pubDate>Thu, 05 Aug 2010 22:50:51 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 23:02:57 GMT]]></title><description><![CDATA[<p>Ja, aber was hat das mit untypisierten Zeigern (void*) zu tun?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936847</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936847</guid><dc:creator><![CDATA[ZZzeigerrrh]]></dc:creator><pubDate>Thu, 05 Aug 2010 23:02:57 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Thu, 05 Aug 2010 23:05:42 GMT]]></title><description><![CDATA[<p><em>frank</em> schrieb:</p>
<blockquote>
<p>also &quot;int *events[evMax]&quot;, da es ja untypisierte pointer sind, richtig?</p>
</blockquote>
<p>So sind es doch Pointer auf int. Meinst du vielleicht Pointer auf void? Ansonsten würden sich natürlich auch Funktionspointer anbieten, aber dafür müsste ich genauer wissen, was du vor hast.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1936848</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936848</guid><dc:creator><![CDATA[SeppJ]]></dc:creator><pubDate>Thu, 05 Aug 2010 23:05:42 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Fri, 06 Aug 2010 05:45:45 GMT]]></title><description><![CDATA[<p>Wäre es nicht wirklich das sauberste/sicherste mit einem std::vector und shared_ptr zu arbeiten?</p>
<pre><code class="language-cpp">#include &lt;vector&gt; //std::vector
#include &lt;memory&gt; //std::tr1::shared_ptr

class MyClass;
typedef std::tr1::shared_ptr&lt;MyClass&gt; MyClassPtr;

class Example{

    public:
        Example(){ };  // Man muss nichts machen!
        ~Example(){ }; // ...auch hier nicht! :-)

    public:
        void AddClass(const MyClass&amp; myClass)
        {
            m_myClassCollection.push_back(myClass);
        }
        MyClassPtr CreateNewMyClass()
        {
            MyClassPtr newMyClass(new MyClass());
            m_myClassCollection.push_back(newMyClass);
            return newMyClass;
        }
        size_t GetMyClassCount()
        {
            return m_myClassCollection.size();
        }
    private:
        std::vector&lt;MyClassPtr&gt; m_myClassCollection;
};
</code></pre>
<p>Nirgendwo musst du etwas initialisieren oder Dich um die Gültigkeit der Zeiger kümmern oder delete aufrufen. Es wird dir alles abgenommen! Innerhalb als auch außerhalb der Beispiel-Klasse. <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/1936883</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1936883</guid><dc:creator><![CDATA[Roger Wilco]]></dc:creator><pubDate>Fri, 06 Aug 2010 05:45:45 GMT</pubDate></item><item><title><![CDATA[Reply to Klasse + Array + Enum on Fri, 06 Aug 2010 14:32:02 GMT]]></title><description><![CDATA[<p>ne ganze klasse um einen Pointer zu halten? zumal ich sowas wie myClass nicht habe...<br />
es sind wirklich untypisierte Zeiger (void*), die gehalten werden müssen.<br />
ich kann meines wissens auch keine funktionspointer draus machen (wie es bei WinApi o.ä. gemacht wird).</p>
<p>das ganze funktioniert so:<br />
<a href="http://stackoverflow.com/questions/2688040/how-to-callback-a-lua-function-from-a-c-function" rel="nofollow">http://stackoverflow.com/questions/2688040/how-to-callback-a-lua-function-from-a-c-function</a></p>
<pre><code>lua_rawgeti(L,LUA_REGISTRYINDEX,callback_function);
//push the parameters and call it
lua_pushnumber(L, 5); // push first argument to the function
lua_pcall(L, 1, 0, 0); // call a function with one argument and no return values
</code></pre>
<p>in sämtlichen c/c++-codes, die ich finde wird die ADresse auch in einem Int hinterlegt statt einem Pointer.</p>
<pre><code>int function_index = luaL_ref(L, LUA_REGISTRYINDEX);
</code></pre>
<p>in meiner Klasse möchte ich verschiedene solche Funktionen speichern können (für die Ereignisse aus dem Enum), somit ein array mit der Anzahl Elemente gleich der möglichen Ereignisse <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>ich hoffe, ich habe ein bisschen Licht ins Dunkel gebracht</p>
<p>Gruß Frank</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1937132</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1937132</guid><dc:creator><![CDATA[_frank_]]></dc:creator><pubDate>Fri, 06 Aug 2010 14:32:02 GMT</pubDate></item></channel></rss>