<?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[a.exe funktioniert nicht mehr]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>Ich soll aus einem Array mit Instanzen der Klasse Figur und deren Subklassen den Index bestimmen, an dem sich die Figur mit der größten Fläche befindet.</p>
<p>Die Baumstruktur sieht wie folgt aus:<br />
FIGUR<br />
KREIS || RECHTECK<br />
||||||||||||| QUADRAT</p>
<p>Bis auf die Klasse Figur besitzen alle Klassen die Methode berechneFlaeche(), die die Fläche des Objektes ausgibt. Das Problem ist, dass bei direkten Instanzen der Klasse Figur die Funktion berechneFlaeche() einen Fehler ausgibt. Um herauszufinden, ob die jeweiligen Arrayelemente direkte Instanzen der Klasse Figur sind oder nicht, habe ich dynamic_cast verwendet.</p>
<p>Mein Code für die Suche nach dem Index sieht wie folgt aus:</p>
<pre><code>int index=0;
	for(int i=0;i&lt;sizeof(fig)-1;i++){
		//Berechnung der Fläche beim aktuellen Index
		double f1;
		Kreis* k1= dynamic_cast&lt;Kreis*&gt;(fig[i]);
		Quadrat* q1=dynamic_cast&lt;Quadrat*&gt;(fig[i]);
		Rechteck* r1=dynamic_cast&lt;Rechteck*&gt;(fig[i]);
		if (q1!=0){f1=q1-&gt;berechneFlaeche();}
		if (r1!=0){f1=r1-&gt;berechneFlaeche();}
		if (k1!=0){f1=k1-&gt;berechneFlaeche();}
		else{f1=0;}
		double f2;
		Kreis* k2= dynamic_cast&lt;Kreis*&gt;(fig[i+1]);
		Quadrat* q2=dynamic_cast&lt;Quadrat*&gt;(fig[i+1]);
		Rechteck* r2=dynamic_cast&lt;Rechteck*&gt;(fig[i+1]);
		if (q2!=0){f2=q1-&gt;berechneFlaeche();}
		if (r2!=0){f2=r1-&gt;berechneFlaeche();}
		if (k2!=0){f2=k1-&gt;berechneFlaeche();}
		else{f2=0;}
		if (f2&gt;f1){index++;}

		}
</code></pre>
<p>Beim Kompilieren gibts keine Fehler/Warnungen.<br />
Woran kann es liegen, dass das Programm abstürzt?</p>
<p>LG<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/330259/a-exe-funktioniert-nicht-mehr</link><generator>RSS for Node</generator><lastBuildDate>Fri, 03 Jul 2026 11:35:42 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/330259.rss" rel="self" type="application/rss+xml"/><pubDate>Tue, 30 Dec 2014 20:33:37 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 20:33:37 GMT]]></title><description><![CDATA[<p>Hallo allerseits,</p>
<p>Ich soll aus einem Array mit Instanzen der Klasse Figur und deren Subklassen den Index bestimmen, an dem sich die Figur mit der größten Fläche befindet.</p>
<p>Die Baumstruktur sieht wie folgt aus:<br />
FIGUR<br />
KREIS || RECHTECK<br />
||||||||||||| QUADRAT</p>
<p>Bis auf die Klasse Figur besitzen alle Klassen die Methode berechneFlaeche(), die die Fläche des Objektes ausgibt. Das Problem ist, dass bei direkten Instanzen der Klasse Figur die Funktion berechneFlaeche() einen Fehler ausgibt. Um herauszufinden, ob die jeweiligen Arrayelemente direkte Instanzen der Klasse Figur sind oder nicht, habe ich dynamic_cast verwendet.</p>
<p>Mein Code für die Suche nach dem Index sieht wie folgt aus:</p>
<pre><code>int index=0;
	for(int i=0;i&lt;sizeof(fig)-1;i++){
		//Berechnung der Fläche beim aktuellen Index
		double f1;
		Kreis* k1= dynamic_cast&lt;Kreis*&gt;(fig[i]);
		Quadrat* q1=dynamic_cast&lt;Quadrat*&gt;(fig[i]);
		Rechteck* r1=dynamic_cast&lt;Rechteck*&gt;(fig[i]);
		if (q1!=0){f1=q1-&gt;berechneFlaeche();}
		if (r1!=0){f1=r1-&gt;berechneFlaeche();}
		if (k1!=0){f1=k1-&gt;berechneFlaeche();}
		else{f1=0;}
		double f2;
		Kreis* k2= dynamic_cast&lt;Kreis*&gt;(fig[i+1]);
		Quadrat* q2=dynamic_cast&lt;Quadrat*&gt;(fig[i+1]);
		Rechteck* r2=dynamic_cast&lt;Rechteck*&gt;(fig[i+1]);
		if (q2!=0){f2=q1-&gt;berechneFlaeche();}
		if (r2!=0){f2=r1-&gt;berechneFlaeche();}
		if (k2!=0){f2=k1-&gt;berechneFlaeche();}
		else{f2=0;}
		if (f2&gt;f1){index++;}

		}
</code></pre>
<p>Beim Kompilieren gibts keine Fehler/Warnungen.<br />
Woran kann es liegen, dass das Programm abstürzt?</p>
<p>LG<br />
Markus</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435425</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435425</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Tue, 30 Dec 2014 20:33:37 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 20:56:08 GMT]]></title><description><![CDATA[<p>Häufig liegt es an einer Exception, die vom Betriebssytem abgefangen werden muss, weil der Programmierer es nicht gemacht hat.</p>
<p>Es gibt auch viele andere möglichen Gründe... Ist aber auch egal, du willst ja wissen, weshalb <code>dein</code> Programm abstürtzt, also zeig mal ein minimales Beispiel, das dein Problem zeigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435429</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435429</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 30 Dec 2014 20:56:08 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 20:59:28 GMT]]></title><description><![CDATA[<p>Als Neuling in C++ weiß ich zwar, dass Exceptions durch try-catch-Strukturen funktionieren, jedoch kann ich leider den Tipp von dir nicht verwerten. Wie wird denn ein Exception vom Betriebssystem abgefangen und wie kann ich durch mein Code verhindern?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435430</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435430</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Tue, 30 Dec 2014 20:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 21:31:07 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Wie wird denn ein Exception vom Betriebssystem abgefangen</p>
</blockquote>
<p>lol</p>
<p>Markus97 schrieb:</p>
<blockquote>
<p>wie kann ich durch mein Code verhindern?</p>
</blockquote>
<p>Indem man auf dynamic_cast und Konsorten verzichtet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435438</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435438</guid><dc:creator><![CDATA[Wutz]]></dc:creator><pubDate>Tue, 30 Dec 2014 21:31:07 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 21:41:44 GMT]]></title><description><![CDATA[<p>Tut mir leid, was ich gepostet habe war auch nicht wirklich eine Lösung für dein Problem.</p>
<p>Was mir ins Auge springt ist gleich deine Abbruchbedingung</p>
<pre><code>for(int i=0;i&lt;sizeof(fig)-1;i++){
</code></pre>
<p>Ist das wirklich was du willst? Du willst hier doch alle Elemente des Arrays von Figuren iterieren, bzw. bis das vorletzte Element, da du ja auch mit i+1 indexierst.</p>
<p>Ich will mal folgendes minimale Beispiel zeigen:</p>
<pre><code>#include &lt;iostream&gt;

int main()
{
    const std::size_t a = 5;
    int arr[a];
    std::cout &lt;&lt; &quot;Anzahl der Elemente im Array: &quot; &lt;&lt; a &lt;&lt; '\n'
              &lt;&lt; &quot;sizeof(Array): &quot; &lt;&lt; sizeof(arr) &lt;&lt; '\n'
              &lt;&lt; &quot;sizeof(int): &quot; &lt;&lt; sizeof(int) &lt;&lt; '\n';
}
</code></pre>
<p>In Anderen Worten: sizeof() liefert hier nicht die Anzahl der Elemente in deinem Array, sondern die Größe als Vielfaches von sizeof(char) ( == 1) (hui, hoff das ist so ok rausgedrückt, sonst gebt mir halt aufn Deckel)<br />
D.h. wenn du es mit sizeof machen willst, müsste es etwa so aussehen:</p>
<pre><code>i &lt; sizeof(arr) / sizeof(Figur) - 1
// was zum Problem wird, wenn du arr als Funktionsparameter übergeben willst.
</code></pre>
<p>Oder du nimmst einfach std::array, dann hast du diese ganzen Probleme nicht, denn std::array kennt sein Größe. Siehe <a href="http://www.cplusplus.com/reference/array/array/" rel="nofollow">http://www.cplusplus.com/reference/array/array/</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435439</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435439</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Tue, 30 Dec 2014 21:41:44 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 23:24:44 GMT]]></title><description><![CDATA[<p>Oh ich dachte, dass man durch die Funktion sizeof direkt die Länge erhält, danke für den Tipp.</p>
<p>Doch auch nach der Änderung stürzt das Programm leider ab:</p>
<pre><code>int index=0;
	for(unsigned int i=0;i&lt;(sizeof(fig)/sizeof(fig[0])) -1;i++){
		//Berechnung der Fläche beim aktuellen Index
		double f1;
		Kreis* k1= dynamic_cast&lt;Kreis*&gt;(fig[i]);
		Quadrat* q1=dynamic_cast&lt;Quadrat*&gt;(fig[i]);
		Rechteck* r1=dynamic_cast&lt;Rechteck*&gt;(fig[i]);
		if (q1!=0){f1=q1-&gt;berechneFlaeche();}
		if (r1!=0){f1=r1-&gt;berechneFlaeche();}
		if (k1!=0){f1=k1-&gt;berechneFlaeche();}
		else{f1=0;}
		double f2;
		Kreis* k2= dynamic_cast&lt;Kreis*&gt;(fig[i+1]);
		Quadrat* q2=dynamic_cast&lt;Quadrat*&gt;(fig[i+1]);
		Rechteck* r2=dynamic_cast&lt;Rechteck*&gt;(fig[i+1]);
		if (q2!=0){f2=q1-&gt;berechneFlaeche();}
		if (r2!=0){f2=r1-&gt;berechneFlaeche();}
		if (k2!=0){f2=k1-&gt;berechneFlaeche();}
		else{f2=0;}
		if (f2&gt;f1){index++;}

		}
</code></pre>
<p>Wutze ich habe nach einer Funktion gesucht, die mir angibt, ob eine Instanz ein Element einer bestimmten Klasse ist oder nicht. Leider habe ich nichts gefunden, sodass ich dynamic_cast verwenden musste.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435455</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435455</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Tue, 30 Dec 2014 23:24:44 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Tue, 30 Dec 2014 23:42:18 GMT]]></title><description><![CDATA[<p>Ich versteh nicht, was Du da gemacht hast!?</p>
<p>Das ist doch wohl eine Hierarchie à la</p>
<pre><code class="language-cpp">struct figur{
  virtual double flaeche() const = 0;
  virtual ~figur() = default;
};

struct kreis : figur{
  kreis(double r) : r(r){}
  double flaeche() const { return 3.1415 * r * r; }
  double r;
};

struct rechteck : figur{
  rechteck(double b, double h) : b(b), h(h){}
  double flaeche() const { return b*h; }
  double b, h;
};

struct quadrat : rechteck{
  quadrat(double b) : rechteck(b,b) {}
};
</code></pre>
<p>Typisches Lehrbeispiel also. Oder nicht?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435458</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435458</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Tue, 30 Dec 2014 23:42:18 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 00:46:51 GMT]]></title><description><![CDATA[<p>Sry aber was bringt mir jetzt dein Beispiel? Von der Hierarchie her ist es passend.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435464</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435464</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 00:46:51 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 01:02:41 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Sry aber was bringt mir jetzt dein Beispiel?</p>
</blockquote>
<p>LOL. Das ist genau der Trick dabei. Indem du dir Zeiger auf die Basisklasse figur hälst, musst du nie wissen, obs jetzt ein Rechteck, ein Kreis, oder sonst was ist. Du musst nur public ableiten, das hat Furble Wurble unterschlagen. dynamic_cast und alle anderen Varianten rauszufinden, obs eine Instanz einer Klasse ist, sind Mist, weil du damit deine Hierarchie nicht erweitern kannst. Jetzt schreibst du irgendwo noch eine Klasse Triangle, und schon musst du alle Stellen mit dem dynamic_cast anpassen. Genau deswegen gibts Ableitungen und Polymorphismus.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435465</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435465</guid><dc:creator><![CDATA[Mechanics]]></dc:creator><pubDate>Wed, 31 Dec 2014 01:02:41 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 09:20:39 GMT]]></title><description><![CDATA[<p>HarteWare schrieb:</p>
<blockquote>
<p>Ich will mal folgendes minimale Beispiel zeigen:</p>
<pre><code>#include &lt;iostream&gt;

int main()
{
    const std::size_t a = 5;
    int arr[a];
    std::cout &lt;&lt; &quot;Anzahl der Elemente im Array: &quot; &lt;&lt; a &lt;&lt; '\n'
              &lt;&lt; &quot;sizeof(Array): &quot; &lt;&lt; sizeof(arr) &lt;&lt; '\n'
              &lt;&lt; &quot;sizeof(int): &quot; &lt;&lt; sizeof(int) &lt;&lt; '\n';
}
</code></pre>
<p>In Anderen Worten: sizeof() liefert hier nicht die Anzahl der Elemente in deinem Array, sondern die Größe als Vielfaches von sizeof(char) ( == 1) (hui, hoff das ist so ok rausgedrückt, sonst gebt mir halt aufn Deckel)</p>
</blockquote>
<p>Das Problem ist nur, was ist im Fall vom OP denn &quot;fig&quot;?<br />
Ist das ein</p>
<pre><code>Figure fig[n];
</code></pre>
<p>oder ein</p>
<pre><code>Figure * fig = new Figure[n];
// bzw
Figure figs[n];
//...
Figure * fig = figs;
</code></pre>
<p>Weil wenn du ein Array-to-Pointer-Decay dabei hast, dann klappt der Trick mit dem sizeof nicht mehr. Da wird dann rauskommen sizeof(pointertype)/sizeof(type).</p>
<p>Abgesehen davon, dass ein Figure fig[n] auch gar nicht polymorph ist/sein kann.</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/31429">@Markus97</a>: Zeig mal die Definition von fig.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435476</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435476</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 31 Dec 2014 09:20:39 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 09:41:29 GMT]]></title><description><![CDATA[<pre><code>//Erzeugung des Arrays mit den jeweiligen Figuren
	Figur* fig[3];
	fig[0]=new Figur(0,-1);
	fig[1]=new Kreis(0,0,1);
	fig[2]=new Rechteck(0,1,2,2);
	fig[3]=new Quadrat(0,2,3);

    // Gebe die Figuren auf der Konsole aus.
    std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;

	int index=0;
	for(unsigned int i=0;i&lt;(sizeof(fig)/sizeof(fig[0])) -1;i++){
		//Berechnung der Fläche beim aktuellen Index
		double f1;
		Figur* k1= dynamic_cast&lt;Figur*&gt;(fig[i]);
		if (k1!=0){f1=0;}
		else{f1=k1-&gt;berechneFlaeche();}
		double f2;
		Figur* k2= dynamic_cast&lt;Figur*&gt;(fig[i+1]);
		if (k2!=0){f2=0;}
		else{f2=k2-&gt;berechneFlaeche();}
		if (f2&gt;f1){index++;}

		}
</code></pre>
<p>Ich dachte, dass alle Elemente eines Arrays dieselbe Speichergröße beanspruchen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435482</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435482</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 09:41:29 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 10:21:54 GMT]]></title><description><![CDATA[<p>Auch wenn der Trick mit sizeof nicht funktioniert und ich es stattdessen mit einer 2 austausche, stürzt das Programm leider ab.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435484</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435484</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 10:21:54 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 10:28:02 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Auch wenn der Trick mit sizeof nicht funktioniert und ich es stattdessen mit einer 2 austausche, stürzt das Programm leider ab.</p>
</blockquote>
<p>Geht aber schon in die richtige Richtung.</p>
<p>ein <code>Figur*[3]</code> hat übrigens auch nur 3 Elemente (0,1 und 2).<br />
Und was soll der cast noch? Du weisst doch, dass das Array <code>Figur*</code> enthält.</p>
<p><code>Figur</code> ist übrigens das Paradebeispiel für eine abstrakte (Basis-)Klasse. Wäre es nicht sinnvoll, wenn man keine Instanzen von <code>Figur</code> erstellen kann? Z.b. weil man eh nix damit machen kann?<br />
Zeichnen? Was?<br />
Flaeche berechnen? Wie?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435485</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435485</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 31 Dec 2014 10:28:02 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 10:31:51 GMT]]></title><description><![CDATA[<p>Ja, genau das müssen sie. In anderen Sprachen muss das nicht unbedingt so sein, aber da ist das auch hinter Abstraktion versteckt. z.B. unterstützt Java eben diese Co- bzw. Kontravarianzen.</p>
<p>Zu deinem Programm:<br />
Wenn du das wirklich so geshcrieben hast, ohne Funktiosnaufruf zwischen den Figuren und der Schleife (sprich ohne, dass das Array zu einem pointer degeneriert) sollte das eigentlich klappen. Aber es geht auch besser.</p>
<p>Dann dein dynamic_cast ist immer noch unnötig, denn dein &quot;Objekt&quot; ist eine Figur (oder Unterklasse, aber damit ists auf jedenfall eine Figur!), du musst nicht nochmal eine Figur draus machen.<br />
Der Nullcheck kann bleiben, aber prüf da gegen nullptr und nicht gegen 0.</p>
<p>Das hier wäre ein Vorschlag wie das ganze etwas eifnacher gehen würde.</p>
<pre><code>std::vector&lt;std::unique_ptr&lt;Figure&gt;&gt; fig;
//std::array&lt;std::unique_ptr&lt;Figure&gt;, 4&gt; fig; // egal ob std::vector doer std::array

fig.push_back(std::make_unique&lt;Figure&gt;(0, -1));
fig.push_back(std::make_unique&lt;Kreis&gt;(0,0,1));
fig.push_back(std::make_unique&lt;Rechteck&gt;(0,1,2,2));
fig.push_back(std::make_unique&lt;Quadrat&gt;(0,2,3));

// Gebe die Figuren auf der Konsole aus.
for(auto const&amp; f : fig)
	std::cout &lt;&lt; f-&gt;asString() &lt;&lt; std::endl;

for(unsigned int i = 0; i &lt; fig.size()-1; i++)
{
	double f1 = (fig[i] == nullptr) ? 0 : fig[i]-&gt;berechneFlaeche();
	double f2 = (fig[i+1] == nullptr) ? 0 : fig[i+1]-&gt;berechneFlaeche();

	if (f2&gt;f1)
		index++;
}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2435486</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435486</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 31 Dec 2014 10:31:51 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 10:33:49 GMT]]></title><description><![CDATA[<blockquote>
<p>ein Figur*[3] hat übrigens auch nur 3 Elemente (0,1 und 2).</p>
</blockquote>
<p>Stimmt, das habe ich übersehen. Leider stürzt die exe-Datei wieder ab.</p>
<blockquote>
<p>Figur ist übrigens das Paradebeispiel für eine abstrakte (Basis-)Klasse. Wäre es nicht sinnvoll, wenn man keine Instanzen von Figur erstellen kann? Z.b. weil man eh nix damit machen kann?<br />
Zeichnen? Was?<br />
Flaeche berechnen? Wie?</p>
</blockquote>
<p>Den Sinn dieser komischen Aufgabe hinterfrage ich erst garnicht <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 />
Laut Aufgabenstellung sollte ich es so programmieren.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435487</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435487</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 10:33:49 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 10:44:20 GMT]]></title><description><![CDATA[<p>Skym0sh0 danke für die Mühe. Ich würde es auch gerne mit Vektoren lösen, jedoch muss ich laut Aufgabenstellung ein Array verwenden.</p>
<p>Eine 0 habe ich aus dem Grund verwendet, weil ich bei Nullpointern die Fehlermeldung &quot;nullptr was not declared in this scope&quot; erhalte.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435491</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435491</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 10:44:20 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 11:59:28 GMT]]></title><description><![CDATA[<p>Okay, was hast du für einen Compiler?<br />
Im (halbwegs) aktuellen MSVC ist nullptr drin und bei nem GCC Derivat musstes mit -std=c++11(oder so ähnlich) aktivieren.</p>
<p>Hast du einen Debugger zur Hand? Wenn ja nutz ihn, dann siehst du wo es kracht (bzw solltest sehen).</p>
<p>Und zeig mal am besten den gesamten Quellcode, wenn er denn die paar hundert Zeilen nicht übersteigt.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435498</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435498</guid><dc:creator><![CDATA[Skym0sh0]]></dc:creator><pubDate>Wed, 31 Dec 2014 11:59:28 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 11:59:52 GMT]]></title><description><![CDATA[<p>Wie gesagt, es gibt auch std::array, und wenn das dir verboten wird, dann würde ich aber mal nach einem guten Grund fragen, denn es ist im Prinzip ein C-Style Array, aber besser (Es gibt glaub manche die meinen, das C-Style Array wäre schneller, mag sein, weiß nicht, aber das ist in diesem Fall wohl nicht von Bedeutung).</p>
<p>Übrigens, für nullptr musst du glaub C++11 &quot;aktivieren&quot;. (googeln)</p>
<p><a class="plugin-mentions-user plugin-mentions-a" href="https://www.c-plusplus.net/forum/uid/18806">@Skym0sh0</a>:<br />
&quot;array-to-pointer-decay&quot; Danke, genau so ein Begriff hat mir gefehlt <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 />
Ich wollte in meinem Beispiel auch eigentlich verdeutlichen, dass man da das &quot;a&quot; verwenden soll, also die eigentliche Größe, um eben solchen Problemen zuvorzukommen.</p>
<p>Ich will noch anmerken, dass solche &quot;asString&quot; &quot;toString&quot; methoden auch nicht gerade C++-like sind. Wozu kann man den &lt;&lt; Operator überladen.<br />
Und wirklich komplizierter ist das auch nicht, wenn man schon so eine toString Funktion hat.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435499</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435499</guid><dc:creator><![CDATA[HarteWare]]></dc:creator><pubDate>Wed, 31 Dec 2014 11:59:52 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 13:46:11 GMT]]></title><description><![CDATA[<p>Ich kompiliere die Codes mit dem Befehl g++ -Wall .cpp.<br />
Als Kompilierer verwende ich mingGW.<br />
Hier der Code für die Basisklasse:<br />
cpp:</p>
<pre><code>#include &quot;figur.hpp&quot;

Figur::Figur(double pos_x, double pos_y)
  : pos_x(pos_x), pos_y(pos_y){}

Figur::~Figur(){}

void Figur::verschiebe(double dx, double dy)
{
  pos_x += dx;
  pos_y += dy;
}

std::string Figur::asString()
{
  return &quot;Dies ist eine Figur. Koordinaten: (&quot;
    + std::to_string(pos_x) + &quot;,&quot; + std::to_string(pos_y) + &quot;)&quot;;
}
</code></pre>
<p>hpp:</p>
<pre><code>#ifndef FIGUR_HPP
#define FIGUR_HPP

#include &lt;string&gt;
#include &quot;tostring.hpp&quot;

class Figur
{
protected:
  // Attribute
  double pos_x;
  double pos_y;

public:
  // Konstruktor
  Figur(double pos_x, double pos_y);
  //Destruktor
  virtual ~Figur();
  // Verschiebt die Figur um dx in x-Richtung und um dy in y-Richtung.
  void verschiebe(double dx, double dy);
  // Gibt einen den die Figur beschreibenden String zurueck.
  virtual std::string asString();
};

#endif
</code></pre>
<p>main-Datei:</p>
<pre><code>#include &lt;iostream&gt;

/* Das Einbinden der Header-Dateien wuerde 
 * ohne Include-Guards zum mehrfachen Einbinden
 * der selben Header-Datei (z.B. figur.hpp) fuehren. 
 */
#include &quot;figur.hpp&quot;
#include &quot;kreis.hpp&quot;
#include &quot;rechteck.hpp&quot;
#include &quot;quadrat.hpp&quot;

int main()
{

	//Erzeugung des Arrays mit den jeweiligen Figuren
	Figur* fig[4];
	fig[0]=new Figur(0,-1);
	fig[1]=new Kreis(0,0,1);
	fig[2]=new Rechteck(0,1,2,2);
	fig[3]=new Quadrat(0,2,3);

    // Gebe die Figuren auf der Konsole aus.
    std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;

	int index=0;
	for(unsigned int i=0;i&lt;2;i++){
		//Berechnung der Fläche beim aktuellen Index
		double f1;
		Kreis* k1= dynamic_cast&lt;Kreis*&gt;(fig[i]);
		Quadrat* q1=dynamic_cast&lt;Quadrat*&gt;(fig[i]);
		Rechteck* r1=dynamic_cast&lt;Rechteck*&gt;(fig[i]);
		if (q1!=0){f1=q1-&gt;berechneFlaeche();}
		if (r1!=0){f1=r1-&gt;berechneFlaeche();}
		if (k1!=0){f1=k1-&gt;berechneFlaeche();}
		else{f1=0;}
		double f2;
		Kreis* k2= dynamic_cast&lt;Kreis*&gt;(fig[i+1]);
		Quadrat* q2=dynamic_cast&lt;Quadrat*&gt;(fig[i+1]);
		Rechteck* r2=dynamic_cast&lt;Rechteck*&gt;(fig[i+1]);
		if (q2!=0){f2=q1-&gt;berechneFlaeche();}
		if (r2!=0){f2=r1-&gt;berechneFlaeche();}
		if (k2!=0){f2=k1-&gt;berechneFlaeche();}
		else{f2=0;}
		if (f2&gt;f1){index++;}

		}
    // Verschiebe Figuren
    fig[0]-&gt;verschiebe(10,10);
    fig[1]-&gt;verschiebe(10,10);
    fig[2]-&gt;verschiebe(10,10);
    fig[3]-&gt;verschiebe(10,10);

    // Gebe die Figuren auf der Konsole aus
    std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;

    // Bereinige Speicher.
    delete fig[0];
    delete fig[1];
    delete fig[2];
    delete fig[3];

}
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2435523</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435523</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 13:46:11 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 13:53:14 GMT]]></title><description><![CDATA[<p>Klassischer copy/paste-Fehler:</p>
<pre><code>if (q1!=0){f1=q1-&gt;berechneFlaeche();}
if (r1!=0){f1=r1-&gt;berechneFlaeche();}
if (k1!=0){f1=k1-&gt;berechneFlaeche();}
else{f1=0;}
double f2;
Kreis* k2= dynamic_cast&lt;Kreis*&gt;(fig[i+1]);
Quadrat* q2=dynamic_cast&lt;Quadrat*&gt;(fig[i+1]);
Rechteck* r2=dynamic_cast&lt;Rechteck*&gt;(fig[i+1]);
if (q2!=0){f2=q1-&gt;berechneFlaeche();}
if (r2!=0){f2=r1-&gt;berechneFlaeche();}
if (k2!=0){f2=k1-&gt;berechneFlaeche();}
//     hier: --^
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/2435525</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435525</guid><dc:creator><![CDATA[Caligulaminus]]></dc:creator><pubDate>Wed, 31 Dec 2014 13:53:14 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 14:00:06 GMT]]></title><description><![CDATA[<p>In der Zukunft sollte ich lieber konzentrierter den Code durchgehen bevor ich hier um Hilfe bitte <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="🙄"
    /> <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="🙄"
    /> <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="🙄"
    /><br />
Danke für die Fehlersuche <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/2435526</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435526</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 14:00:06 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 17:29:24 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>main-Datei:</p>
<pre><code>#include &lt;iostream&gt;

/* Das Einbinden der Header-Dateien wuerde 
 * ohne Include-Guards zum mehrfachen Einbinden
 * der selben Header-Datei (z.B. figur.hpp) fuehren. 
 */
#include &quot;figur.hpp&quot;
#include &quot;kreis.hpp&quot;
#include &quot;rechteck.hpp&quot;
#include &quot;quadrat.hpp&quot;

int main()
{
  
	//Erzeugung des Arrays mit den jeweiligen Figuren
	Figur* fig[4];
	fig[0]=new Figur(0,-1);
	fig[1]=new Kreis(0,0,1);
	fig[2]=new Rechteck(0,1,2,2);
	fig[3]=new Quadrat(0,2,3);

    // Gebe die Figuren auf der Konsole aus.
    std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;
	
	
	
	int index=0;
	for(unsigned int i=0;i&lt;2;i++){
		//Berechnung der Fläche beim aktuellen Index
		double f1;
		Kreis* k1= dynamic_cast&lt;Kreis*&gt;(fig[i]);
		Quadrat* q1=dynamic_cast&lt;Quadrat*&gt;(fig[i]);
		Rechteck* r1=dynamic_cast&lt;Rechteck*&gt;(fig[i]);
		if (q1!=0){f1=q1-&gt;berechneFlaeche();}
		if (r1!=0){f1=r1-&gt;berechneFlaeche();}
		if (k1!=0){f1=k1-&gt;berechneFlaeche();}
		else{f1=0;}
		double f2;
		Kreis* k2= dynamic_cast&lt;Kreis*&gt;(fig[i+1]);
		Quadrat* q2=dynamic_cast&lt;Quadrat*&gt;(fig[i+1]);
		Rechteck* r2=dynamic_cast&lt;Rechteck*&gt;(fig[i+1]);
		if (q2!=0){f2=q1-&gt;berechneFlaeche();}
		if (r2!=0){f2=r1-&gt;berechneFlaeche();}
		if (k2!=0){f2=k1-&gt;berechneFlaeche();}
		else{f2=0;}
		if (f2&gt;f1){index++;}
		
		}
    // Verschiebe Figuren
    fig[0]-&gt;verschiebe(10,10);
    fig[1]-&gt;verschiebe(10,10);
    fig[2]-&gt;verschiebe(10,10);
    fig[3]-&gt;verschiebe(10,10);

    // Gebe die Figuren auf der Konsole aus
    std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;

    // Bereinige Speicher.
    delete fig[0];
    delete fig[1];
    delete fig[2];
    delete fig[3];
}
</code></pre>
</blockquote>
<p>Ähm...jetzt bin ich baff...</p>
<p>Bist Du sicher dass Du die Aufgabe richtig verstanden hast? Gibt es dazu einen Lehrer oder Prof, bei dem Du nachfragen kannst?</p>
<p>Und noch eins:</p>
<pre><code class="language-cpp">// Gebe die Figuren auf der Konsole aus
    std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;
    std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;
</code></pre>
<p>Kennst Du einen Mechanismus in C++, der ohne copy&amp;paste einen Programmabschnitt x-mal wiederholt?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435564</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435564</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 31 Dec 2014 17:29:24 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 17:37:32 GMT]]></title><description><![CDATA[<p>Ich denke ich habe die Aufgabe gut verstanden <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>Und noch eins:<br />
C++:<br />
// Gebe die Figuren auf der Konsole aus<br />
std::cout &lt;&lt; fig[0]-&gt;asString() &lt;&lt; std::endl;<br />
std::cout &lt;&lt; fig[1]-&gt;asString() &lt;&lt; std::endl;<br />
std::cout &lt;&lt; fig[2]-&gt;asString() &lt;&lt; std::endl;<br />
std::cout &lt;&lt; fig[3]-&gt;asString() &lt;&lt; std::endl;<br />
Kennst Du einen Mechanismus in C++, der ohne copy&amp;paste einen Programmabschnitt x-mal wiederholt?</p>
</blockquote>
<p>Ja natürlich kenne ich da einen Mechanismus^^ Nur war die Aufgabe so gegeben.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/2435566</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435566</guid><dc:creator><![CDATA[Markus97]]></dc:creator><pubDate>Wed, 31 Dec 2014 17:37:32 GMT</pubDate></item><item><title><![CDATA[Reply to a.exe funktioniert nicht mehr on Wed, 31 Dec 2014 18:00:27 GMT]]></title><description><![CDATA[<p>Markus97 schrieb:</p>
<blockquote>
<p>Nur war die Aufgabe so gegeben.</p>
</blockquote>
<p>Vielleicht eine pädagogische Volte...</p>
<p>Guten Rutsch jedenfalls! <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/2435570</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/2435570</guid><dc:creator><![CDATA[Furble Wurble]]></dc:creator><pubDate>Wed, 31 Dec 2014 18:00:27 GMT</pubDate></item></channel></rss>