<?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[Menü Klasse - Konstruktor Problem]]></title><description><![CDATA[<p>Hallo, ich wollte mir eine &quot;Menü Klasse&quot; schreiben, aber es kommt da beim ersten Konstruktor schon immer ein Error, ich schätze mal das kommt irgendwie davon das ich das Array &quot;P&quot; im Konstruktor nicht richtig zuweise?</p>
<p>ERROR:</p>
<blockquote>
<p>Compiling: main.cpp<br />
In file included from main.cpp:2:<br />
standard.h: In constructor <code>menu::menu(std::string)': standard.h:29: error: expected</code>(' before '[' token<br />
standard.h:29: confused by earlier errors, bailing out<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>KLASSE &quot;menu&quot;</p>
<pre><code class="language-cpp">#ifndef STANDARD_H_INCLUDED
#define STANDARD_H_INCLUDED

#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

class menu
{
    public:
    menu(string P1);                                                             // }
    menu(string P1,string P2);                                                   // }
    menu(string P1,string P2,string P3);                                         // } Konstruktor überladen, sodass man
    menu(string P1,string P2,string P3,string P4);                               // } die Anzahl der Menüpunkt aussuchen
    menu(string P1,string P2,string P3,string P4,string P5);                     // } kann. (Maximaleanzahl=7 Menüpunkte)
    menu(string P1,string P2,string P3,string P4,string P5,string P6);           // }
    menu(string P1,string P2,string P3,string P4,string P5,string P6,string P7); // }
    ~menu();
    void Draw(int a); //überladen, um den Abstand der Menüpunkte anzugebe (1=1Zeile, 2=2Zeilen 3=3Zeilen....)
    void Draw(); //wenn man nichts angibt dann ist der Abstand automatisch 0 Zeilen und der Menüpunkt ist direkt unter
                 //dem überliegenden

    private:
    string P[7];
    const short NUMBER_OF_P;
};

menu::menu(string P1)
:P[0](P1),NUMBER_OF_P(1)
{

}

menu::menu(string P1,string P2)
:P[0](P1),P[1](P2),NUMBER_OF_P(2)
{

}

menu::menu(string P1,string P2,string P3)
:P[0](P1),P[1](P2),P[2](P3),NUMBER_OF_P(3)
{

}

menu::menu(string P1,string P2,string P3,string P4)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),NUMBER_OF_P(4)
{

}

menu::menu(string P1,string P2,string P3,string P4,string P5)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),P[4](P5),NUMBER_OF_P(5)
{

}

menu::menu(string P1,string P2,string P3,string P4,string P5,string P6)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),P[4](P5),P[5](P6),NUMBER_OF_P(6)
{

}
menu::menu(string P1,string P2,string P3,string P4,string P5,string P6,string P7)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),P[4](P5),P[5](P6),P[6](P7),NUMBER_OF_P(7)
{

}

menu::~menu()
{

}

void menu::Draw(int a);
{
    for (int i=0;i&lt;NUMBER_OF_P;i++)
    {
        cout &lt;&lt; P[i] &lt;&lt; &quot;(&quot; &lt;&lt; i &lt;&lt; &quot;)\n&quot;;
        for (int j=0;i&lt;a;i++)
        {
            cout &lt;&lt; &quot;\n&quot;;
        }
    }
}

void menu::Draw();
{
    for (int i=0;i&lt;NUMBER_OF_P;i++)
    {
        cout &lt;&lt; P[i] &lt;&lt; &quot;(&quot; &lt;&lt; i &lt;&lt; &quot;)\n&quot;;
    }
}

#endif // STANDARD_H_INCLUDED
</code></pre>
<p>Und dann hätte ich noch eine Frage, und zwar wie ist das den genau mit den Headern der STL. Wie man sieht habe ich jetzt in der Klasse &quot;menu&quot; den Header &lt;iostream&gt; und &lt;string&gt; eingebunden, und ich hab mir halt gedacht es kommen strings vor also muss ich wohl auch den &quot;string Header&quot; einbinden, genauso bei &lt;iostream&gt;, weil in der Funktion &quot;void menu::Draw....&quot; kommt ja ein &quot;cout&quot; vor somit muss man ja wohl oder übel &lt;iostream&gt; einbinden. So, aber muss ich nun eigentlich in der main nochmal &lt;iostream&gt; und &lt;string&gt; mit einbinden, oder wie läuft das? Wie macht ihr das mit euren Headern und so. Kann mir das jemand mal erklären?</p>
<p>Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/176097/menü-klasse-konstruktor-problem</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 14:08:49 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/176097.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 17 Mar 2007 15:55:54 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 15:55:54 GMT]]></title><description><![CDATA[<p>Hallo, ich wollte mir eine &quot;Menü Klasse&quot; schreiben, aber es kommt da beim ersten Konstruktor schon immer ein Error, ich schätze mal das kommt irgendwie davon das ich das Array &quot;P&quot; im Konstruktor nicht richtig zuweise?</p>
<p>ERROR:</p>
<blockquote>
<p>Compiling: main.cpp<br />
In file included from main.cpp:2:<br />
standard.h: In constructor <code>menu::menu(std::string)': standard.h:29: error: expected</code>(' before '[' token<br />
standard.h:29: confused by earlier errors, bailing out<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
2 errors, 0 warnings</p>
</blockquote>
<p>KLASSE &quot;menu&quot;</p>
<pre><code class="language-cpp">#ifndef STANDARD_H_INCLUDED
#define STANDARD_H_INCLUDED

#include &lt;string&gt;
#include &lt;iostream&gt;
using namespace std;

class menu
{
    public:
    menu(string P1);                                                             // }
    menu(string P1,string P2);                                                   // }
    menu(string P1,string P2,string P3);                                         // } Konstruktor überladen, sodass man
    menu(string P1,string P2,string P3,string P4);                               // } die Anzahl der Menüpunkt aussuchen
    menu(string P1,string P2,string P3,string P4,string P5);                     // } kann. (Maximaleanzahl=7 Menüpunkte)
    menu(string P1,string P2,string P3,string P4,string P5,string P6);           // }
    menu(string P1,string P2,string P3,string P4,string P5,string P6,string P7); // }
    ~menu();
    void Draw(int a); //überladen, um den Abstand der Menüpunkte anzugebe (1=1Zeile, 2=2Zeilen 3=3Zeilen....)
    void Draw(); //wenn man nichts angibt dann ist der Abstand automatisch 0 Zeilen und der Menüpunkt ist direkt unter
                 //dem überliegenden

    private:
    string P[7];
    const short NUMBER_OF_P;
};

menu::menu(string P1)
:P[0](P1),NUMBER_OF_P(1)
{

}

menu::menu(string P1,string P2)
:P[0](P1),P[1](P2),NUMBER_OF_P(2)
{

}

menu::menu(string P1,string P2,string P3)
:P[0](P1),P[1](P2),P[2](P3),NUMBER_OF_P(3)
{

}

menu::menu(string P1,string P2,string P3,string P4)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),NUMBER_OF_P(4)
{

}

menu::menu(string P1,string P2,string P3,string P4,string P5)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),P[4](P5),NUMBER_OF_P(5)
{

}

menu::menu(string P1,string P2,string P3,string P4,string P5,string P6)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),P[4](P5),P[5](P6),NUMBER_OF_P(6)
{

}
menu::menu(string P1,string P2,string P3,string P4,string P5,string P6,string P7)
:P[0](P1),P[1](P2),P[2](P3),P[3](P4),P[4](P5),P[5](P6),P[6](P7),NUMBER_OF_P(7)
{

}

menu::~menu()
{

}

void menu::Draw(int a);
{
    for (int i=0;i&lt;NUMBER_OF_P;i++)
    {
        cout &lt;&lt; P[i] &lt;&lt; &quot;(&quot; &lt;&lt; i &lt;&lt; &quot;)\n&quot;;
        for (int j=0;i&lt;a;i++)
        {
            cout &lt;&lt; &quot;\n&quot;;
        }
    }
}

void menu::Draw();
{
    for (int i=0;i&lt;NUMBER_OF_P;i++)
    {
        cout &lt;&lt; P[i] &lt;&lt; &quot;(&quot; &lt;&lt; i &lt;&lt; &quot;)\n&quot;;
    }
}

#endif // STANDARD_H_INCLUDED
</code></pre>
<p>Und dann hätte ich noch eine Frage, und zwar wie ist das den genau mit den Headern der STL. Wie man sieht habe ich jetzt in der Klasse &quot;menu&quot; den Header &lt;iostream&gt; und &lt;string&gt; eingebunden, und ich hab mir halt gedacht es kommen strings vor also muss ich wohl auch den &quot;string Header&quot; einbinden, genauso bei &lt;iostream&gt;, weil in der Funktion &quot;void menu::Draw....&quot; kommt ja ein &quot;cout&quot; vor somit muss man ja wohl oder übel &lt;iostream&gt; einbinden. So, aber muss ich nun eigentlich in der main nochmal &lt;iostream&gt; und &lt;string&gt; mit einbinden, oder wie läuft das? Wie macht ihr das mit euren Headern und so. Kann mir das jemand mal erklären?</p>
<p>Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247317</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247317</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 17 Mar 2007 15:55:54 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:06:39 GMT]]></title><description><![CDATA[<p>Alle deine Überladungen sind unsinnvoll und müssten weg.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247328</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247328</guid><dc:creator><![CDATA[Entenwickler]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:06:39 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:14:07 GMT]]></title><description><![CDATA[<p>Ganz böser Code <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="😉"
    /> Mach das mal ein wenig anders... davon abgesehen das using namespace im header verboten sein sollte und du die ganzen implementierungen auch im header hast ... machs knackig und kurz:</p>
<p>control_menu.h</p>
<pre><code class="language-cpp">#ifndef CONTROL_MENU_H__INCLUDED
#define CONTROL_MENU_H__INCLUDED

#pragma once

#include &lt;iostream&gt;
#include &lt;string&gt;
#include &lt;vector&gt;

namespace control
{
	class menu
	{
	public:
		menu();
		~menu();

	public:
		void draw(const unsigned short line_heigth = 0);
		size_t add_item(const std::string&amp;);

	private:
		std::vector&lt;std::string&gt;	m_items;
	};
};

#endif // CONTROL_MENU_H__INCLUDED
</code></pre>
<p>control_menu.cpp</p>
<pre><code class="language-cpp">namespace control
{
	menu::menu()
	{
	}

	menu::~menu()
	{
		m_items.clear();
	}

	void menu::draw(const unsigned short line_heigth)
	{
		for (size_t item = 0; item &lt; m_items.size(); ++item)
		{
			std::cout &lt;&lt; &quot;(&quot; &lt;&lt; (item + 1) &lt;&lt; &quot;) &quot; &lt;&lt; m_items[item]&lt;&lt; std::endl;

			for (unsigned short line_free = 0; line_free &lt; line_heigth; ++line_free)
				std::cout &lt;&lt; &quot;\n&quot; &lt;&lt; std::flush;
		}
	}

	size_t menu::add_item(const std::string&amp; item)
	{
		m_items.push_back(item);
		return (m_items.size() - 1);
	}
}
</code></pre>
<p>... <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>aja wie du es nutzt:</p>
<pre><code class="language-cpp">#include &quot;control_menu.h&quot;

int main()
{
	control::menu menu;
	menu.add_item(&quot;Exit&quot;);
	menu.add_item(&quot;About&quot;);
	menu.add_item(&quot;Calc&quot;);
	menu.add_item(&quot;Settings&quot;);

	menu.draw();
}
</code></pre>
<p>Hmm warum ich namespaces direkt mit eingesetzt hab?<br />
So setzt du nachher alle deine controls in den namespace &quot;control&quot; und verlierst nicht die Übersicht und es kann gleichzeitig nicht zu Namensüberschreibungen kommen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247333</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247333</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:14:07 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:14:29 GMT]]></title><description><![CDATA[<p>... oben hinzu editiert ...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247335</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247335</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:14:29 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:24:15 GMT]]></title><description><![CDATA[<p>(D)Evil schrieb:</p>
<blockquote>
<pre><code class="language-cpp">menu::~menu()
	{
		m_items.clear();
	}
</code></pre>
</blockquote>
<p>wtf?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247344</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247344</guid><dc:creator><![CDATA[finix]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:24:15 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:41:49 GMT]]></title><description><![CDATA[<p>Ooh, meine güte seit ihr schnell <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="🙂"
    /> <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="👍"
    /><br />
Hab in der zeit an einer anderen lösung getüftelt- hier kann der OP seinen riesenkonstructor verwenden, wenn er will, sieht etwa so aus (alles in einer .cpp datei :p )</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;stdarg.h&gt;

using namespace std;

class MyMenu{
public:

	int iMenuOptionCount;	//amount of strings in menu
	char** pMenuOption;	//pointers to the strings of menu

	//constructor (_!!the sole and only ONE!!_ constructor)
	MyMenu(int iOptionCount, ...){

		//saving the count of menu options
		iMenuOptionCount=iOptionCount;
		//allocating enough space on heap
		pMenuOption=new char* [iMenuOptionCount];

		//initializing the list of variables
		//pointer to the list of args:
		va_list pArgList; 
		//start is right after &quot;iOptionCount&quot; arguement:
		va_start (pArgList, iOptionCount);

		//saving char*-pointers into the array
		for(int i=0; i&lt;iOptionCount; i++){
			pMenuOption[i]=va_arg(pArgList, char*);
		}

		//end: clearing pointers, closing argument list
		va_end (pArgList);
	}

	~MyMenu(){
		delete[] pMenuOption;
	}

	void Draw(){
		for(int i=0; i&lt;iMenuOptionCount; i++){
			cout&lt;&lt;pMenuOption[i]&lt;&lt;endl;
		}
	}

};

int main(){
    MyMenu menu=MyMenu(5, &quot;open&quot;, &quot;close&quot;, &quot;save&quot;, &quot;delete&quot;, &quot;exit&quot;);
    menu.Draw();
    return 0;
}
</code></pre>
<p>würd einfach ma gerne hören, was es dran auszusetzen gibt <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247356</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247356</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:41:49 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:53:05 GMT]]></title><description><![CDATA[<p>Jo und in C++ ist mein Vorschlag um 100% schöner. Und sicherer dazu auch noch.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247361</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247361</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:53:05 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 16:54:03 GMT]]></title><description><![CDATA[<p>Also das von Andrea funktioniert bei mir, bloß das verstehe ich so gar nicht:<br />
Was sollen den bitte die &quot;...&quot;, das hab ich noch nie wo gesehen:</p>
<pre><code class="language-cpp">...
MyMenu(int iOptionCount, ...)
...
</code></pre>
<p>Uii <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /><br />
Äh und das von (D)Evil hat bei mir leider nicht funktioniert, da kamen bei mir ganz viele Erros:</p>
<blockquote>
<p>-------------- Build: Debug in menu_professional ---------------<br />
Compiling: control_menu.cpp<br />
control_menu.cpp:3: error: <code>menu' has not been declared control_menu.cpp:4: error: ISO C++ forbids declaration of</code>menu' with no type<br />
control_menu.cpp:7: error: expected constructor, destructor, or type conversion before '::' token<br />
control_menu.cpp:7: error: expected <code>,' or</code>;' before '::' token<br />
control_menu.cpp:12: error: <code>menu' is not a class or namespace control_menu.cpp: In function</code>void control::draw(short unsigned int)':<br />
control_menu.cpp:14: error: <code>size\_t' undeclared (first use this function) control_menu.cpp:14: error: (Each undeclared identifier is reported only once for each function it appears in.) control_menu.cpp:14: error: expected</code>;' before &quot;item&quot;<br />
control_menu.cpp:14: error: <code>item' undeclared (first use this function) control\_menu.cpp:14: error:</code>m_items' undeclared (first use this function)<br />
control_menu.cpp:16: error: `cout' is not a member of `std'<br />
control_menu.cpp:16: error: `endl' is not a member of `std'<br />
control_menu.cpp:19: error: `cout' is not a member of `std'<br />
control_menu.cpp:19: error: `flush' is not a member of `std'<br />
control_menu.cpp: At global scope:<br />
control_menu.cpp:23: error: `size_t' does not name a type<br />
Process terminated with status 1 (0 minutes, 0 seconds)<br />
15 errors, 0 warnings</p>
</blockquote>
<p>So ich mach jetzt dann auch nochmal eine neu Klasse Menü, hab ja jetzt viele Anregungen von euch gesammelt. Das mit den riesieg überladenen Konstruktoren is glaub nicht so das Ware, und wir mit der Zeit sicherlich unnötig komplizert. Aber Andrey hat meine Idee schon irgendwie verwirklicht, aber ohne das man die hundertausende von Konstruktoren schreiben muss... mh ich hab zwar no net so ganz verstanden wir er das gemacht hat, aber werds mir gleich mal genau durchschauen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247362</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247362</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 17 Mar 2007 16:54:03 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 17:06:06 GMT]]></title><description><![CDATA[<p>1.) ich heisse Andre<strong>y</strong> (ist n männlicher name, damit hir ja nix missverstandn wird [warum haben alle probleme mit russischen namen <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f62e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_open_mouth"
      title=":open_mouth:"
      alt="😮"
    /> ] <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /> )<br />
2.) Die &quot;...&quot; stehen für eine beliebige anzahl von argumenten: du kannst da beliebig viele char* argumente übergeben. Aber wie (D)Evil gesagt hat: sicher ist die sahce nicht, wenn du dich da vertippst oder verzählst, gibts mächtig stress und der compiler meldet nicht ma fehler <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /><br />
3.) die lösung von (D)Evil lässt sich auch für dynamisch veränderbare menus verwenden, bei meinem vorschlag müsste man wohl das ganze programm neucompilieren, um den inhalt des menus zu verändern <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /><br />
=&gt; hör lieber auf (D)Evil <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="👍"
    /> , ich joke hier nur n bissl rum <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247373</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247373</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sat, 17 Mar 2007 17:06:06 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 17:36:58 GMT]]></title><description><![CDATA[<p>@ Andre<strong>y</strong></p>
<p>Ja okay vll. sollte ich mich dann eher an den Vorschlag von &quot;(D)Evil&quot; halten, aber interessieren tut mich den Beispiel jetzt schon. Woher kommen die ganzen Funktion mit &quot;va_list&quot;, &quot;va_start&quot;...?? Aus #include &lt;stdio.h&gt; oder aus #include &lt;stdarg.h&gt; ???<br />
Und was genau bewirken die?<br />
Kannst du mal erläutern was du genau in diesem Abschnitt machst?</p>
<pre><code class="language-cpp">/*hier machst du mal ein paar Array, glaub ich und zwar soviele wie bei iMenuOptionCount angegeben wurden, und dann machst du da noch &quot;new char&quot; weil das alles zu Laufzeit noch nicht bekannt ist, und somit muss es auf den Heap. aber was ich nicht verstehe was soll das Sternchen &quot;*&quot; nach &quot;new char&quot;, und warum ist &quot;pMenuOption&quot; eigentlich kein normaler Zeiger, sondern ein Zeiger auf einen Zeiger??? Also mit &quot;**&quot; */
        pMenuOption=new char* [iMenuOptionCount];
        //hier hab ich keinen plan was passiert
        va_list pArgList; 
        /* hier hab ich auch keinen Plan, hat aber doch irgendwas mit dem Konstruktor und den 3 &quot;...&quot; zu tun oder? */
        va_start (pArgList, iOptionCount);
        /* und hier übergibst du irgendwie das was man bei &quot;...&quot; im Konstruktor eingegeben hat an pMenuOption, bloß blick ich da net ganz durch wo das Zeug aus &quot;...&quot; jetzt genau herkommt */
        for(int i=0; i&lt;iOptionCount; i++){
            pMenuOption[i]=va_arg(pArgList, char*);
        }
        /* und da wird irgendwie was beendet. Sowas wie delete? Also von der Stelle hab ich auch keinen Plan */
        va_end (pArgList);
</code></pre>
<p>Bitte erkläre mir das doch ein bisschen, ich möchte den Code halt einfach verstehen.</p>
<p>Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247388</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247388</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 17 Mar 2007 17:36:58 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 18:58:21 GMT]]></title><description><![CDATA[<p>an dieser stelle würde sich ein blick in die dokumentation lohnen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Aber na jut, was solls, wenn ich die geschicht schon angefangen hab^^</p>
<p>also:<br />
Die sache mit &quot;char* []&quot; hab ich hier nur verwendet, um das ganze beispiel so &quot;primitiv&quot; wie möglich zu halten, ist eigentlich ganz leicht zu verstehen, wenn man sich vor augen führt, dass arrays &quot;[]&quot; sowas wie &quot;bewegliche pointer&quot; sind. Wenns dir mehr gefällt, kannst du &quot;new char* [i]&quot; durch &quot;new string [i]&quot; ersetzen. Ist auch besser lesbar...</p>
<p>Dann zu &quot;...&quot;<br />
Wenn du eine funktion schreibst, die beliebig viele argumente akzeptiert, brauchst du &lt;stdarg.h&gt; sowie &lt;stdio.h&gt; (einfach beides #include'n).</p>
<p>&quot;va_list&quot; ist ein datentyp für einen zeiger, der auf die argumente der funktion zeigt. Mit &quot;va_list pArgList;&quot; wird also erstmal so ein zeiger auf die funktionsparameter deklariert.</p>
<p>&quot;va_start&quot; sorgt dafür, dass dieser zeiger richtig initialisiert wird, und tatsächlich auf die argumente, die anstelle von &quot;...&quot; kommen, zeigt. Dieses makro benötigt also den zeiger selbst, sowie den bezeichner des letzten gewöhnlichen parameters, der vor &quot;...&quot; kommt: in diesem fall war es &quot;iOptionCount&quot;</p>
<p>mit &quot;va_arg&quot; kannst du dann die parameter aus deiner parameterliste auslesen. Deswegen muss va_arg natürlich wissen, <strong>wo</strong> (zeiger) es lesen soll, und auserdem <strong>was</strong> (datentyp) es aus der parameterliste lesen soll (weil bei &quot;...&quot; die datentypen <strong>nicht</strong> explizit angegeben werden [daher kommt die unsicherheit <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /> ] )<br />
Nachdem va_arg den parameter eingelesen hat, versetzt es ausserdem den pArgList pointer (zB bei &quot;char&quot; um einen byte, bei &quot;int&quot; um vier bytes etc) damit er immer auf den nächsten parameter zeigt.</p>
<p>wozu va_end genau benötigt wird, weis ich auch nicht, sollte man aber jedes mal hinzufügen, ansonsten kann vorhersehbares verhalten nicht garantiert werden.</p>
<p>so, hoffentlich ist jetzt dieser ansatz klarer geworden. Aber wie gesagt: sicher ist es nicht... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/26a0.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--warning"
      title=":warning:"
      alt="⚠"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247430</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sat, 17 Mar 2007 18:58:21 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 19:05:15 GMT]]></title><description><![CDATA[<p>diese &quot;...&quot;-funktionen sollte man eigentlich, wenn es geht, nur dort verwenden, wo der fehler a)keine katastrophale folgen hat b)relativ leicht zu finden ist. Wenn der code 100% bombensicher sein soll, sollte man's lieber sein lassen... <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247434</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247434</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sat, 17 Mar 2007 19:05:15 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 19:18:32 GMT]]></title><description><![CDATA[<p>Vor allem erzeugt die Ellipse mit C++-Objekten undefiniertes Verhalten. Das schränkt die Benutzbarkeit noch weiter ein.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247439</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 17 Mar 2007 19:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 20:50:11 GMT]]></title><description><![CDATA[<p>inwiefern erzeugt es denn ein undefiniertes verhalten?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247482</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sat, 17 Mar 2007 20:50:11 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 21:36:14 GMT]]></title><description><![CDATA[<p>Was heißt &quot;inwiefern&quot;? Tu ein C++-Objekt in eine Ellipsenfunktion und es kann Beliebiges passieren. Klar, da kann auch das Richtige dabei sein, aber das ist eben nicht garantiert.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247503</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247503</guid><dc:creator><![CDATA[.filmor]]></dc:creator><pubDate>Sat, 17 Mar 2007 21:36:14 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 22:58:18 GMT]]></title><description><![CDATA[<p>Stelle ich etwas vollkommen falsches unter &quot;c++ Objekt&quot; vor?</p>
<pre><code class="language-cpp">#include &lt;stdio.h&gt;
#include &lt;iostream&gt;
#include &lt;stdarg.h&gt;

using namespace std;

class Vector2D{        //das hier ist doch eine klasse?
public:
	float x; float y;
	Vector2D(){
		x=0.0f; y=0.0f;
	}
	Vector2D(float _x, float _y){
		x=_x; y=_y;
	}
};

Vector2D average(int iNumVectors, ... ){        //das ist doch eine ellipse?
	Vector2D v=Vector2D(0.0f, 0.0f);
	Vector2D arg;

	va_list pArgs;
	va_start(pArgs, iNumVectors);
	for(int i=0; i&lt;iNumVectors; i++){
		arg=va_arg(pArgs, Vector2D);
		v=Vector2D(v.x+arg.x, v.y+arg.y);
	}

	v=Vector2D(v.x/iNumVectors, v.y/iNumVectors);
	return v;
}

int main(){
    //und instanzen von klassen sind doch &quot;Objekte&quot; oder?
    Vector2D middlepoint=average(3,
				Vector2D(0.0f,0.0f),
				Vector2D(0.0f,2.0f),
				Vector2D(3.0f,1.0f));
    cout&lt;&lt;&quot;x=&quot;&lt;&lt;middlepoint.x&lt;&lt;&quot; y=&quot;&lt;&lt;middlepoint.y&lt;&lt;endl;
    return 0;
}
</code></pre>
<p>Also, ich weis jetzt nicht, was du mit dem &quot;undefinierten verhalten&quot; meinst...<br />
Klappt doch alles wunderbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247525</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Sat, 17 Mar 2007 22:58:18 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sat, 17 Mar 2007 23:06:03 GMT]]></title><description><![CDATA[<p>So ich hab jetzt hier auch mal selber noch mal eine Klasse Menü geschrieben. Wie findet ihr die? Ist aber doch sicherlich besser als meine erste oder? <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>standard.h</p>
<pre><code class="language-cpp">#ifndef STANDARD_H_INCLUDED
#define STANDARD_H_INCLUDED

#include &lt;string&gt;

class Array
{
    public:
    Array();
    virtual ~Array();
    void change_size(std::string **TempArray,int laengeALT,int laengeNEU);
};

class menu : public Array
{
    public:
    menu();
    ~menu();
    void add_menu_point(std::string name);
    void Draw(int interval=0);
    private:
    std::string *P;
    int number_of_P;
};

#endif // STANDARD_H_INCLUDED
</code></pre>
<p>standard.cpp</p>
<pre><code class="language-cpp">#include &quot;standard.h&quot;
#include &lt;iostream&gt;

//###class Array ###
Array::Array()
{

}

Array::~Array()
{

}

void Array::change_size(std::string **TempArray,int laengeALT,int laengeNEU)
{
    std::string *temp=new std::string[laengeALT];
    for (int i=0;i&lt;laengeALT;i++)
    {
        temp[i]=(*TempArray)[i];
    }
    delete [](*TempArray);
    *TempArray=0;
    *TempArray=new std::string[laengeALT+laengeNEU];
    for (int i=0;i&lt;laengeALT;i++)
    {
        (*TempArray)[i]=temp[i];
    }
    delete []temp;
}

//### class menu ###
menu::menu()
:P(new std::string[1]),number_of_P(1)
{

}

menu::~menu()
{
    delete P;
}

void menu::Draw(int interval)
{
    for (int i=0;i&lt;number_of_P;i++)
    {
        std::cout &lt;&lt; P[i] &lt;&lt; &quot;\n&quot;;
        for (int j=0;j&lt;interval;j++)
        {
            std::cout &lt;&lt; &quot;\n&quot;;
        }
    }
}

void menu::add_menu_point(std::string name)
{
    change_size(&amp;P,number_of_P,1);
    P[number_of_P-1]=name;
    number_of_P++;
}
</code></pre>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;standard.h&quot;

int main()
{
    menu Menu;
    Menu.add_menu_point(&quot;NEU STARTEN&quot;);
    Menu.add_menu_point(&quot;WEITER&quot;);
    Menu.add_menu_point(&quot;ZURUECK&quot;);
    Menu.add_menu_point(&quot;OPTIONEN&quot;);
    Menu.add_menu_point(&quot;ENDE&quot;);
    Menu.Draw();

    return 0;
}
</code></pre>
<p>So, das is jetzt halt nur mit Array's. Mit &quot;std::vector&lt;...&gt;&quot; wäre es sicherlich professioneller, aber ich hatte mir vorgenommen nur das zu verwenden was ich bis jetzt in meinem C++ Buch gemacht habe. Ich weiß zwar schon ungefähr wie man mit vector arbeitet (aus nem früheren Tutorial), aber wollte ihn erster Linie eigentlich nur mit dem Wissen aus meinem Buch arbeiten.<br />
Wie kann ich das jetzt noch verbessern? Dankeschön schon mal im Voraus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247530</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247530</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sat, 17 Mar 2007 23:06:03 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sun, 18 Mar 2007 10:43:33 GMT]]></title><description><![CDATA[<p>Naja das ganze Pointerrumschuppsen muss nicht sein. Kommentier das wenn dann ein wenig ... ist nämlich sicherlich nicht gerade ein schöner Ansatz ... selbst für Pointerschubbsen <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>Warum nehmt ihr nicht vectoren? Das ist sicher und ihr müsst euch um fast nichts kümmern.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1247620</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1247620</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Sun, 18 Mar 2007 10:43:33 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Sun, 18 Mar 2007 21:37:48 GMT]]></title><description><![CDATA[<p>So ich habs jetzt nochmal bisschen verbessert und mit der &quot;Improved Console&quot; gearbeitet!! Seit heute liebe ich die Improved Konsole!! Gibts was besseres? Also das ding is echt &quot;göttlich&quot;!!!! Man kann jetzt sogar mit &quot;W&quot; und &quot;S&quot; wie in nem &quot;echten Menü&quot; hoch und runter switchen!!!<br />
Hier mal meinen Code, vll. schaut es ja jemand an:</p>
<p>main.cpp</p>
<pre><code class="language-cpp">#include &quot;menu.h&quot;

int main()
{
    menu Menu;
    Menu.add_menu_point(&quot;NEU STARTEN&quot;);
    Menu.add_menu_point(&quot;WEITER&quot;);
    Menu.add_menu_point(&quot;ZURUECK&quot;);
    Menu.add_menu_point(&quot;OPTIONEN&quot;);
    Menu.add_menu_point(&quot;ENDE&quot;);
    while (1)
    {
        Menu.Draw();
    }

    return 0;
}
</code></pre>
<p>menu.cpp</p>
<pre><code class="language-cpp">#include &quot;menu.h&quot;
#include &lt;conio.h&gt;
#include &lt;iostream&gt;
#include &quot;ic.h&quot;

using namespace ic;
using namespace shorties;

//###class Array ###
Array::Array()
{

}

Array::~Array()
{

}

//Funktion um ein Array nachträglich zu vergrößern
void Array::change_size(std::string **TempArray,int laengeALT,int laengeNEU)
{
    std::string *temp=new std::string[laengeALT];
    for (int i=0;i&lt;laengeALT;i++)
    {
        temp[i]=(*TempArray)[i];
    }
    delete [](*TempArray);
    *TempArray=0;
    *TempArray=new std::string[laengeALT+laengeNEU];
    for (int i=0;i&lt;laengeALT;i++)
    {
        (*TempArray)[i]=temp[i];
    }
    delete []temp;
}

//### class menu ###
menu::menu()
:P(new std::string[1]),number_of_P(1),
key(0),chapter(0)
{

}

menu::~menu()
{
    delete P;
}

//schreibt die menü namen hin und regelt das menü
void menu::Draw(int interval)
{
    for (int i=0;i&lt;number_of_P;i++)
    {
        animation(i);

        std::cout &lt;&lt; P[i] &lt;&lt; &quot;\n&quot;;
        for (int j=0;j&lt;interval;j++)
        {
            std::cout &lt;&lt; &quot;\n&quot;;
        }
    }
    keystroke();
    key_controll();
    con.setCurPos(0,0);
    con.clearColor(FG_RED);
}

//funktion um einen neuen menüpunkt hinzuzufügen
void menu::add_menu_point(std::string name)
{
    change_size(&amp;P,number_of_P,1);
    P[number_of_P-1]=name;
    number_of_P++;
}

//speichert die atseneingabe
short menu::keystroke()
{
    key=getch();
    return key;
}

//erstellt die textfarbe anhand der improved console
void menu::animation(int counter)
{
    con.setTextColor(FG_WHITE);
    if (chapter==counter) con.setTextColor(FG_RED);
}

//kontrolliert das &quot;switchen&quot; mit der &quot;S&quot; und &quot;W&quot; Taste, und regelt es
void menu::key_controll()
{
    if (key==115)
    {
        chapter=chapter+1;
    }
    if (key==119)
    {
        chapter=chapter-1;
    }
    if (chapter&gt;number_of_P-2)
    {
        chapter=number_of_P-2;
    }
    if (chapter&lt;0)
    {
        chapter=0;
    }
}
</code></pre>
<p>menu.h</p>
<pre><code class="language-cpp">#ifndef STANDARD_H_INCLUDED
#define STANDARD_H_INCLUDED

#include &lt;string&gt;

class Array
{
    public:
    Array();
    virtual ~Array();
    void change_size(std::string **TempArray,int laengeALT,int laengeNEU);
};

class menu : public Array
{
    public:
    menu();
    ~menu();
    void add_menu_point(std::string name);
    void Draw(int interval=0);
    short keystroke();
    void animation(int counter);
    void key_controll();
    private:
    std::string *P;
    int number_of_P;
    short key;
    short chapter;
};

#endif // STANDARD_H_INCLUDED
</code></pre>
<p>Und &quot;include &quot;ic.h&quot; &quot; damit ist natürlich die cooooole Improved Konsole gemeint. Ich finds echt toll, es ist zum ersten mal das eines meiner Programme ein bisschen Frabe abekommen hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248041</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248041</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Sun, 18 Mar 2007 21:37:48 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 09:16:52 GMT]]></title><description><![CDATA[<p>Andrey schrieb:</p>
<blockquote>
<p>Also, ich weis jetzt nicht, was du mit dem &quot;undefinierten verhalten&quot; meinst...<br />
Klappt doch alles wunderbar <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f615.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--confused_face"
      title=":confused:"
      alt="😕"
    /></p>
</blockquote>
<p>Um nochmal hier drauf einzugehen: Das klappt? Prima! Ist trotzdem undefiniert...</p>
<p>Und genau das ist das Problem an undefiniertem Verhalten: Es ist nicht gesagt dass es <strong>nicht</strong> klappt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248183</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248183</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 19 Mar 2007 09:16:52 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 14:32:58 GMT]]></title><description><![CDATA[<p>Stromberg schrieb:</p>
<blockquote>
<p>...</p>
<pre><code class="language-cpp">menu(string P1);                                                             // }
    menu(string P1,string P2);                                                   // }
    menu(string P1,string P2,string P3);                                         // } Konstruktor überladen, sodass man
    menu(string P1,string P2,string P3,string P4);                               // } die Anzahl der Menüpunkt aussuchen
    menu(string P1,string P2,string P3,string P4,string P5);                     // } kann. (Maximaleanzahl=7 Menüpunkte)
    menu(string P1,string P2,string P3,string P4,string P5,string P6);           // }
    menu(string P1,string P2,string P3,string P4,string P5,string P6,string P7); // }
</code></pre>
<p>...</p>
</blockquote>
<p>Äh ... warum nimmst Du nicht Defaultparameter (falls es nur relativ wenige Parameter sind) oder einen</p>
<pre><code class="language-cpp">menu(vector&lt;string&gt; const&amp; allePs);
   // Geht natürlich nicht, wenn man unterschiedliche Typen hat oder die Initialisierungsliste nutzen muss
</code></pre>
<p>Halte ich für wesentlich einfacher, übersichtlicher und sicherer ...</p>
<p>Gruß,</p>
<p>Simon2.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248198</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248198</guid><dc:creator><![CDATA[Simon2]]></dc:creator><pubDate>Mon, 19 Mar 2007 14:32:58 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 13:44:38 GMT]]></title><description><![CDATA[<p>LordJaxom schrieb:</p>
<blockquote>
<p>Um nochmal hier drauf einzugehen: Das klappt? Prima! Ist trotzdem undefiniert...</p>
<p>Und genau das ist das Problem an undefiniertem Verhalten: Es ist nicht gesagt dass es <strong>nicht</strong> klappt.</p>
</blockquote>
<p>also, das will ich jetz aber wirklich verstehen! :p<br />
So, hab hier dieselbe funktion nochmal ein bisschen anders umgeschrieben, ohne dieser ganzen makros (in wirklichkeit sehen die makros auch nicht viel anders aus, nur n bisschen schwerer lesbar, finde ich... ) Wie auch immer, die selbstgebackenen funktionieren auch.</p>
<pre><code class="language-cpp">Vector2D myAverageEllipseFunction(int iNumArgs, ...){

	//entspricht in etwa: va_list pArgList
	char* pArgList;

	//entspricht in etwa: va_start(pArgList,iNumArgs)
	pArgList=(char*)((long)&amp;iNumArgs+sizeof(iNumArgs));

	Vector2D v=Vector2D(0.0f, 0.0f);
	Vector2D arg;

	for(int i=0; i&lt;iNumArgs; i++){

	//argument lesen, entspricht in etwa va_arg(pArgList,Vector2D);
		arg=*((Vector2D*)(pArgList));
		//pointer versetzen, macht auch va_arg
		pArgList=(char*)((long)pArgList+sizeof(Vector2D));

		v=Vector2D(v.x+arg.x, v.y+arg.y);

	}

	//was va_end genau amcht, weis ich nicht
	pArgList=(char*)0;

	v=Vector2D(v.x/iNumArgs, v.y/iNumArgs);
	return v;
}
</code></pre>
<p>Sieht zwar ziemlich finster aus, dafür sind hier keine makros, von den unklar ist, was die eigentlich tun. <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /><br />
Für diese ellipse braucht man nur sizeof() und casting in (char*) und zurück.<br />
Frage: was davon funktioniert bei c++ Objekten anders als bei primitiven datentypen wie char oder int? solange alle argumente nacheinander im stack abgelegt werden, ist doch alles in ordnung. Oder? <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f644.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--face_with_rolling_eyes"
      title=":rolling_eyes:"
      alt="🙄"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248389</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248389</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Mon, 19 Mar 2007 13:44:38 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 13:54:36 GMT]]></title><description><![CDATA[<p>Dann verstehe: Objekte über Ellipsen zu übergeben ist undefiniert. Das sagt der Standard. Der Standard gibt die Sprache vor. Du programmierst in der Sprache.</p>
<p>Was sagt uns das? Es ist vollkommen uninteressant, ob das auf Deiner Plattform / mit Deinem Compiler / .... jetzt gerade funktioniert, denn es ist nicht garantiert, dass es woanders auch funktioniert. Es ist nichtmal garantiert dass es unter denselben Voraussetzungen in der nächsten Mondphase noch funktioniert. Es ist schlicht und ergreifend undefiniert.</p>
<p>Über das Warum mag ich hier garnicht philosophieren, auch weil ich die Gründe selbst nicht vollständig kenne. Aber da es laut Standard undefiniert ist brauche ich garnicht viel drüber nachdenken, warum (und unter welchen Umständen) es dennoch funktionieren könnte :p</p>
<p>Ich habe gesprochen (How!) <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248403</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248403</guid><dc:creator><![CDATA[LordJaxom]]></dc:creator><pubDate>Mon, 19 Mar 2007 13:54:36 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 19:35:21 GMT]]></title><description><![CDATA[<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/13624">@Simon2</a><br />
Jop das hab ich auch schon erkannt des es so ziemlich unübersichtilich ist, deshlab hab ich doch nochmal eine neue &quot;menu Klasse&quot; geschreiben, in der man nun die Menüpunkte über die Funktion add_menu_point(&quot;blablab&quot;) hinzufügen kann. Und wie schon gesagt ich wollte nicht mit vector arbeiten.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248721</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248721</guid><dc:creator><![CDATA[Stromberg]]></dc:creator><pubDate>Mon, 19 Mar 2007 19:35:21 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 20:58:51 GMT]]></title><description><![CDATA[<p>Ich bitte die Adminstratoren bzw Moderatoren diesen Thread zu schließen. Mehrere saubere Lösungsvorschläge wurden bereits presentiert, doch scheint der Threadersteller nicht einzusehen, das seine Lösung einem äußerst unsauberen Code-Stil entspricht.</p>
<p>@Threadersteller:<br />
Sorry wenn ich die Mods jetzt bitte den Thread zu schließen ... aber guck dir erstmal dein Buch weiter an bevor du die Klasse schreibst ... es bringt dir nix hier wildes Pointerschubbsen zu betreiben ... wenn du bei vectoren usw. bist kannst du dich nochmal an die Aufgabe wagen und dir dann evt. nochmal meinen oder auch die Lösungsvorschläge anderer anzugucken.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248778</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248778</guid><dc:creator><![CDATA[*D*Evil]]></dc:creator><pubDate>Mon, 19 Mar 2007 20:58:51 GMT</pubDate></item><item><title><![CDATA[Reply to Menü Klasse - Konstruktor Problem on Mon, 19 Mar 2007 21:14:03 GMT]]></title><description><![CDATA[<p>bevor das ganze hier geschlossen wird:<br />
<a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/10648">@LordJaxom</a>:</p>
<p>LordJaxom schrieb:</p>
<blockquote>
<p>Es ist vollkommen uninteressant, ob das auf Deiner Plattform / mit Deinem Compiler / .... jetzt gerade funktioniert:D</p>
</blockquote>
<p>okay, ich muss zugeben, dass ich das auf einer einzigen plattform, mit einem einzigen compiler getestet habe <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f44e.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--thumbs_down"
      title=":-1:"
      alt="👎"
    /> kann mir jedoch trotzdem nicht vorstellen, dass es anderswo nicht funktioniert, weil es mir als die einzige logische lösung erscheint, einfach alle argumente nacheinander im speicher abzulegen. Na gut, der compiler wirds schon besser wissen. Dann ists halt undefiniert.</p>
<p>@(D)Evil: naja, der threadersteller hat das ganze hier ja nicht vollgemüllt: ich wars <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f603.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--grinning_face_with_big_eyes"
      title=":D"
      alt="😃"
    /> Ausserdem kann man doch nicht von jedem gleich verlangen, dass er von anfang an immer nur mit den perfekten lösungen weiterarbeitet, wenn der Stromberg mit den vectoren klarkommt, wird er bestimmt einsehen, dass du von anfang an recht hattest <img
      src="https://www.c-plusplus.net/forum/plugins/nodebb-plugin-emoji/emoji/emoji-one/1f921.png?v=ab1pehoraso"
      class="not-responsive emoji emoji-emoji-one emoji--clown_face"
      title=":clown:"
      alt="🤡"
    /></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1248791</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1248791</guid><dc:creator><![CDATA[Andrey]]></dc:creator><pubDate>Mon, 19 Mar 2007 21:14:03 GMT</pubDate></item></channel></rss>