<?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[Problem mit Exceptions]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe hier einige Klassen mit Methonden, die irgendwelche Aufgaben leisten.<br />
Komm ich nun in einer solchen Methode an einen Punkt, an dem etwas unstimmig ist, wird eine Exception vom selbstdef. Typ &quot;StatusError&quot; geworfen.</p>
<pre><code class="language-cpp">void Klassenname::MethodeSoUndSo(){
   //tu hier irgendwas
   if(status == false)
      throw StatusError(IntVariable);
}
</code></pre>
<p>Zudem habe ich eine ganze konkrete Forderung, wie StatusError aussehen soll:</p>
<pre><code class="language-cpp">Bei jedem Auftreten eines Fehlers soll automatisch ein Protokolleintrag in eine Log-Datei ERROR.LOG geschrieben werden.  
&quot;Automatisch&quot; heißt dabei: 
- Das Hauptprogramm ist an dem Log-Eintrag überhaupt nicht beteiligt. Dieser Eintrag erfolgt z.B. auch dann, 
wenn keinerlei Exception Handling im Hauptprogramm erfolgt. 
- Die Klassen sollen unabhängig von der konkreten Fehlerreaktion sein.
 Deshalb sind sie am Dateiprotokoll ebenso wenig beteiligt wie sie den Fehler auch nicht selbst an der Konsole melden.
 Daraus folgt, dass die Dateiausgabe (ebenso wie die Generierung des Fehlertextes) von der Exception-Klasse abgewickelt werde muss
</code></pre>
<p>Die Klasse StatusError habe ich so realisiert:</p>
<pre><code class="language-cpp">class StatusError{
	private:
		string message;
	public:
		StatusError(int sig){
			ostringstream os;
			os &lt;&lt; &quot;Fehler beim Leihen / Rueckgeben von Signature &quot; &lt;&lt; sig &lt;&lt;&quot;.&quot;;
			message = os.str();

			ofstream f(&quot;ERROR.LOG&quot;,ios::out | ios::app);
			f &lt;&lt; message &lt;&lt; &quot;\n&quot;;
		}
		string ausgabe(){return message;}
};
</code></pre>
<p>Mein Problem ist: Wenn ich in meinem Hauptprogramm keinen Handler anlege und die Exception wird geworfen, bekomm ich einen Fehler:</p>
<pre><code class="language-cpp">Unhandled exception at 0x7c812a5b in Medienbib4.exe: Microsoft C++ exception: StatusError at memory location 0x0012fc60
</code></pre>
<p>Die Aufgabenstellung sagt aber ganz klar: Selbst wenn ich keine try- und catch-Blöcke im Hauptprogramm habe, soll der Logeintrag erfolgen.<br />
Weiß jemand Rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/topic/243802/problem-mit-exceptions</link><generator>RSS for Node</generator><lastBuildDate>Sat, 19 Sep 2026 16:15:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/243802.rss" rel="self" type="application/rss+xml"/><pubDate>Sun, 21 Jun 2009 15:19:25 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 15:19:25 GMT]]></title><description><![CDATA[<p>Hallo!</p>
<p>Ich habe hier einige Klassen mit Methonden, die irgendwelche Aufgaben leisten.<br />
Komm ich nun in einer solchen Methode an einen Punkt, an dem etwas unstimmig ist, wird eine Exception vom selbstdef. Typ &quot;StatusError&quot; geworfen.</p>
<pre><code class="language-cpp">void Klassenname::MethodeSoUndSo(){
   //tu hier irgendwas
   if(status == false)
      throw StatusError(IntVariable);
}
</code></pre>
<p>Zudem habe ich eine ganze konkrete Forderung, wie StatusError aussehen soll:</p>
<pre><code class="language-cpp">Bei jedem Auftreten eines Fehlers soll automatisch ein Protokolleintrag in eine Log-Datei ERROR.LOG geschrieben werden.  
&quot;Automatisch&quot; heißt dabei: 
- Das Hauptprogramm ist an dem Log-Eintrag überhaupt nicht beteiligt. Dieser Eintrag erfolgt z.B. auch dann, 
wenn keinerlei Exception Handling im Hauptprogramm erfolgt. 
- Die Klassen sollen unabhängig von der konkreten Fehlerreaktion sein.
 Deshalb sind sie am Dateiprotokoll ebenso wenig beteiligt wie sie den Fehler auch nicht selbst an der Konsole melden.
 Daraus folgt, dass die Dateiausgabe (ebenso wie die Generierung des Fehlertextes) von der Exception-Klasse abgewickelt werde muss
</code></pre>
<p>Die Klasse StatusError habe ich so realisiert:</p>
<pre><code class="language-cpp">class StatusError{
	private:
		string message;
	public:
		StatusError(int sig){
			ostringstream os;
			os &lt;&lt; &quot;Fehler beim Leihen / Rueckgeben von Signature &quot; &lt;&lt; sig &lt;&lt;&quot;.&quot;;
			message = os.str();

			ofstream f(&quot;ERROR.LOG&quot;,ios::out | ios::app);
			f &lt;&lt; message &lt;&lt; &quot;\n&quot;;
		}
		string ausgabe(){return message;}
};
</code></pre>
<p>Mein Problem ist: Wenn ich in meinem Hauptprogramm keinen Handler anlege und die Exception wird geworfen, bekomm ich einen Fehler:</p>
<pre><code class="language-cpp">Unhandled exception at 0x7c812a5b in Medienbib4.exe: Microsoft C++ exception: StatusError at memory location 0x0012fc60
</code></pre>
<p>Die Aufgabenstellung sagt aber ganz klar: Selbst wenn ich keine try- und catch-Blöcke im Hauptprogramm habe, soll der Logeintrag erfolgen.<br />
Weiß jemand Rat?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730547</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730547</guid><dc:creator><![CDATA[lebkuchenmann]]></dc:creator><pubDate>Sun, 21 Jun 2009 15:19:25 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 15:23:28 GMT]]></title><description><![CDATA[<p>Das Objekt, was dann geworfen wird (StatusError), wird ja auch dann konstruiert - und da du im CTor in die Log-Datei schreiben lässt, solltest du die Aufgabenstellung auch erfüllt haben!</p>
<p>Ich würde nur</p>
<pre><code class="language-cpp">f &lt;&lt; message &lt;&lt; &quot;\n&quot;;
</code></pre>
<p>in</p>
<pre><code class="language-cpp">f &lt;&lt; message &lt;&lt; std::endl;
</code></pre>
<p>ändern...</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730549</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730549</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 21 Jun 2009 15:23:28 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 17:20:30 GMT]]></title><description><![CDATA[<p>Gibts denn keine Möglichkeit den Fehler so zu unterdrücken, dass der Programmablauf im Weiteren nicht gestört wird?</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730631</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730631</guid><dc:creator><![CDATA[lebkuchenmann]]></dc:creator><pubDate>Sun, 21 Jun 2009 17:20:30 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 17:37:14 GMT]]></title><description><![CDATA[<p>lebkuchenmann schrieb:</p>
<blockquote>
<p>Gibts denn keine Möglichkeit den Fehler so zu unterdrücken, dass der Programmablauf im Weiteren nicht gestört wird?</p>
</blockquote>
<p>Nein. Das wäre auch nicht der Sinn von Exceptions - wenn sie einfach ignoriert werden können, sinds auch keine ausnahmen...</p>
<p>Das verlangt deine Aufgabenstellung doch aber auch gar nicht:</p>
<blockquote>
<p>Bei jedem Auftreten eines Fehlers soll automatisch ein Protokolleintrag in eine Log-Datei ERROR.LOG geschrieben werden.</p>
</blockquote>
<p>haben wir</p>
<blockquote>
<p>&quot;Automatisch&quot; heißt dabei:<br />
- Das Hauptprogramm ist an dem Log-Eintrag überhaupt nicht beteiligt.</p>
</blockquote>
<p>haben wir</p>
<blockquote>
<p>Dieser Eintrag erfolgt z.B. auch dann, wenn keinerlei Exception Handling im Hauptprogramm erfolgt.</p>
</blockquote>
<p>haben wir</p>
<blockquote>
<p>- Die Klassen sollen unabhängig von der konkreten Fehlerreaktion sein.<br />
Deshalb sind sie am Dateiprotokoll ebenso wenig beteiligt wie sie den Fehler auch nicht selbst an der Konsole melden.<br />
Daraus folgt, dass die Dateiausgabe (ebenso wie die Generierung des Fehlertextes) von der Exception-Klasse abgewickelt werde muss</p>
</blockquote>
<p>und auch das haben wir</p>
<p>bb</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730638</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730638</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 21 Jun 2009 17:37:14 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 17:39:12 GMT]]></title><description><![CDATA[<p>lebkuchenmann schrieb:</p>
<blockquote>
<p>Gibts denn keine Möglichkeit den Fehler so zu unterdrücken, dass der Programmablauf im Weiteren nicht gestört wird?</p>
</blockquote>
<p>Doch, in dem du die exception catchst.</p>
<pre><code class="language-cpp">try {
   mach_was_boeses();
} catch( const Error&amp; e ) {
   behandle_angerichtetes_uebel();
}
</code></pre>
<p>Sollte aber in deinem $KOMPENDIUM zu exceptions stehen...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730640</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730640</guid><dc:creator><![CDATA[tandem]]></dc:creator><pubDate>Sun, 21 Jun 2009 17:39:12 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 17:42:52 GMT]]></title><description><![CDATA[<p>Damit unterdrückt man den Fehler aber nicht...</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730643</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730643</guid><dc:creator><![CDATA[unskilled]]></dc:creator><pubDate>Sun, 21 Jun 2009 17:42:52 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 18:35:18 GMT]]></title><description><![CDATA[<p>Wenn der Programmablauf &quot;im Weiteren nicht gestört&quot; gestört werden soll, dann darfst du auch keine Exception werfen. Stattdessen schreibst du StatusError(IntVariable); und damit läuft das Programm trotz Fehler weiter. Inwiefern das sinnvoll sein soll, kann ich aber nicht nachvollziehen.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730673</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730673</guid><dc:creator><![CDATA[Nanyuki]]></dc:creator><pubDate>Sun, 21 Jun 2009 18:35:18 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 19:12:11 GMT]]></title><description><![CDATA[<p>unskilled schrieb:</p>
<blockquote>
<p>Damit unterdrückt man den Fehler aber nicht...</p>
</blockquote>
<p>Sry, aber es werden Exceptions geworfen. Ob das seine eigenen Klassen sind oder nicht, es ist scheinbar einfach so.<br />
Dann gibts die Beschwerde, dass das Programm abbricht. Was ja auch passieren SOLL wenn die Exception nicht abgefangen wird. Einen Weg, die Exceptions zu umgehen ohne try/catch gibt es nicht.</p>
<p>Also entweder</p>
<ol>
<li>Keine Exceptions werfen</li>
<li>Keinen Programmabbruch haben wollen -&gt; try/catch</li>
<li>Programmabbruch in Kauf nehmen (unschön)</li>
<li>Das Programm per exit beenden, wenn ein Fehler auftritt -&gt; try/catch.</li>
</ol>
<p>Und das sollte auch im Buch/Tutorial/sonstwas bei den Exceptions stehen.</p>
<p>Unterdrücken geht nicht.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1730691</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730691</guid><dc:creator><![CDATA[tandem]]></dc:creator><pubDate>Sun, 21 Jun 2009 19:12:11 GMT</pubDate></item><item><title><![CDATA[Reply to Problem mit Exceptions on Sun, 21 Jun 2009 21:38:40 GMT]]></title><description><![CDATA[<p>tandem schrieb:</p>
<blockquote>
<ol>
<li>Keine Exceptions werfen</li>
<li>Keinen Programmabbruch haben wollen -&gt; try/catch</li>
<li>Programmabbruch in Kauf nehmen (unschön)</li>
<li>Das Programm per exit beenden, wenn ein Fehler auftritt -&gt; try/catch.</li>
</ol>
</blockquote>
<p>Wenn man 2) nur dazu benutzt, einen Programmabbruch zu verhindern, indem man Exceptions ignoriert, finde ich 3) immer noch schöner. Exceptions werden nicht ausgelöst, um den Programmierer zu nerven.</p>
<ol start="4">
<li>ist übrigens auch keine gute Idee, da das Programm mit <code>exit()</code> abrupt beendet wird und keine Destruktoren mehr aufgerufen werden.</li>
</ol>
]]></description><link>https://www.c-plusplus.net/forum/post/1730746</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1730746</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sun, 21 Jun 2009 21:38:40 GMT</pubDate></item></channel></rss>