<?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[Exception-Klasse als Vorwärtsdeklaration?]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe versucht, in einer Header-Datei eine Exception-Klasse aus einer anderen Datei per Vorwärtsdeklaration bekannt zu machen, damit eine Methode darin diese Ausnahme werfen kann. Der gcc meckert, sobald ich das &quot;throw&quot; an die Methode anhänge, mit einer Fehlermeldung; statt dessen muss ich die komplette Header, in der die Exception-Klasse deklariert ist, einbinden, was ich vermeiden wollte.</p>
<p>Ich sehe jedoch keinen prinzipiellen Unterschied darin, eine Klasse bekannt zu machen, um z.B. einen Pointer drauf zeigen zu lassen, und der Ankündigung einer Methode, eine solche Ausnahme werfen zu können. In beiden Fällen wird doch weder ein Objekt erzeugt noch auf Methoden zugegriffen?</p>
<p>In den cpp-Files sind alle Header dann drin.</p>
<p>Wo liegt die Ursache?</p>
<p>Gruß, min</p>
<p>So etwa sieht das aus:</p>
<pre><code>[cpp]// foo.h:

class MyException
{
private:
    string text;

public:
    MyException( const string&amp; text_ );
    ~MyException( );
};

// bar.h:

// Vorwärtsdeklaration:
class MyException;

class AndereKlasse
{
...
    void heikleMethode( ) [i]throw MyException;[/i]
};[/cpp]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/topic/235838/exception-klasse-als-vorwärtsdeklaration</link><generator>RSS for Node</generator><lastBuildDate>Thu, 24 Sep 2026 04:21:17 GMT</lastBuildDate><atom:link href="https://www.c-plusplus.net/forum/topic/235838.rss" rel="self" type="application/rss+xml"/><pubDate>Sat, 07 Mar 2009 00:45:38 GMT</pubDate><ttl>60</ttl><item><title><![CDATA[Reply to Exception-Klasse als Vorwärtsdeklaration? on Sat, 07 Mar 2009 00:45:38 GMT]]></title><description><![CDATA[<p>Hallo zusammen,</p>
<p>ich habe versucht, in einer Header-Datei eine Exception-Klasse aus einer anderen Datei per Vorwärtsdeklaration bekannt zu machen, damit eine Methode darin diese Ausnahme werfen kann. Der gcc meckert, sobald ich das &quot;throw&quot; an die Methode anhänge, mit einer Fehlermeldung; statt dessen muss ich die komplette Header, in der die Exception-Klasse deklariert ist, einbinden, was ich vermeiden wollte.</p>
<p>Ich sehe jedoch keinen prinzipiellen Unterschied darin, eine Klasse bekannt zu machen, um z.B. einen Pointer drauf zeigen zu lassen, und der Ankündigung einer Methode, eine solche Ausnahme werfen zu können. In beiden Fällen wird doch weder ein Objekt erzeugt noch auf Methoden zugegriffen?</p>
<p>In den cpp-Files sind alle Header dann drin.</p>
<p>Wo liegt die Ursache?</p>
<p>Gruß, min</p>
<p>So etwa sieht das aus:</p>
<pre><code>[cpp]// foo.h:

class MyException
{
private:
    string text;

public:
    MyException( const string&amp; text_ );
    ~MyException( );
};

// bar.h:

// Vorwärtsdeklaration:
class MyException;

class AndereKlasse
{
...
    void heikleMethode( ) [i]throw MyException;[/i]
};[/cpp]
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1675575</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675575</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sat, 07 Mar 2009 00:45:38 GMT</pubDate></item><item><title><![CDATA[Reply to Exception-Klasse als Vorwärtsdeklaration? on Sat, 07 Mar 2009 01:03:34 GMT]]></title><description><![CDATA[<p>minastaros schrieb:</p>
<blockquote>
<p>In beiden Fällen wird doch weder ein Objekt erzeugt noch auf Methoden zugegriffen?</p>
</blockquote>
<p>Was denkst du, was passiert, wenn eine Exception geworfen wird? Genau, es kommt zur Konstruktion eines Objekts. <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>Das siehst du ja auch bei den Standard-Exceptions, schliesslich rufst du da den Konstruktor auf:</p>
<pre><code class="language-cpp">throw std::runtime_error(&quot;Laufzeitfehler&quot;);
</code></pre>
]]></description><link>https://www.c-plusplus.net/forum/post/1675577</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675577</guid><dc:creator><![CDATA[Nexus]]></dc:creator><pubDate>Sat, 07 Mar 2009 01:03:34 GMT</pubDate></item><item><title><![CDATA[Reply to Exception-Klasse als Vorwärtsdeklaration? on Sat, 07 Mar 2009 11:18:32 GMT]]></title><description><![CDATA[<p>Ich denke mal, dass es ihm nicht um das eigentliche throw geht, wo er ein Objekt wirft, sondern um die Ausnahmespezifikation.</p>
<p>Und warum das nicht geht:</p>
<p>ISO/IEC 14882 15.4/1 schrieb:</p>
<blockquote>
<p>A type denoted in an exception-specification shall not denote an incomplete type.</p>
</blockquote>
<p>btw:<br />
MSVC++ 08 unterstützt das Feature sowieso nicht..<br />
<a href="http://msdn.microsoft.com/de-de/library/skce93f2(en-us,VS.80).aspx" rel="nofollow">http://msdn.microsoft.com/de-de/library/skce93f2(en-us,VS.80).aspx</a></p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675633</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675633</guid><dc:creator><![CDATA[drakon]]></dc:creator><pubDate>Sat, 07 Mar 2009 11:18:32 GMT</pubDate></item><item><title><![CDATA[Reply to Exception-Klasse als Vorwärtsdeklaration? on Sat, 07 Mar 2009 12:01:20 GMT]]></title><description><![CDATA[<p>Lass die Spezifikation ganz weg und schreib in die Doku bzw. die Kommentare zur Methode, dass diese Exception fliegen kann. Es gibt eine Handvoll Gründe, warum man in C++ nur selten Exceptionspezifikationen verwendet.</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675648</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675648</guid><dc:creator><![CDATA[pumuckl]]></dc:creator><pubDate>Sat, 07 Mar 2009 12:01:20 GMT</pubDate></item><item><title><![CDATA[Reply to Exception-Klasse als Vorwärtsdeklaration? on Sat, 07 Mar 2009 13:40:22 GMT]]></title><description><![CDATA[<p>Hallo Nexus,</p>
<p>drakon hat recht, in der Header geht es ja nur um die <em>Ankündigung</em>, dass die Exception fliegen kann. Der eigentliche Aufruf ist dann in der Implementierung in bar.cpp, und dort ist natürlich auch #include &quot;foo.h&quot; komplett mit drin.</p>
<p>Mir ging es darum, so viel wie möglich über Vorwärtsdeklarationen abzudecken, also alles, was nur als Pointer oder Referenz oder Funktionsparameter in der Header steht. Daher ist es eigentlich logisch, dass eine Exception-<em>Ankündigung</em> auf die gleiche Weise bekannt gemacht werden können sollte (was'n Satz <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>Werde mich daher an pumuckl halten und das Ganze im Kommentar beschreiben, denn wenn ich das throw hier im Header weglasse, funktioniert es ja (also der eigentliche Exception-Wurf später in heikleMethode( ) ).</p>
<p>Danke auf jeden Fall für den Hinweis auf die ISO, das erklärt das Ganze zumindest nach dem &quot;Buchstaben des Gesetzes&quot;.</p>
<p>Gruß, min</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675701</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675701</guid><dc:creator><![CDATA[minastaros]]></dc:creator><pubDate>Sat, 07 Mar 2009 13:40:22 GMT</pubDate></item><item><title><![CDATA[Reply to Exception-Klasse als Vorwärtsdeklaration? on Sat, 07 Mar 2009 13:56:45 GMT]]></title><description><![CDATA[<p>pumuckl schrieb:</p>
<blockquote>
<p>Es gibt eine Handvoll Gründe, warum man in C++ nur selten Exceptionspezifikationen verwendet.</p>
</blockquote>
<p>Wenn ich mich recht erinnere, dann werden die in diesem Artikel zum Teil genannt:<br />
<a href="http://www.gotw.ca/publications/mill22.htm" rel="nofollow">http://www.gotw.ca/publications/mill22.htm</a></p>
<p>-&gt; Interessante Lektüre <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>Grüssli</p>
]]></description><link>https://www.c-plusplus.net/forum/post/1675710</link><guid isPermaLink="true">https://www.c-plusplus.net/forum/post/1675710</guid><dc:creator><![CDATA[Dravere]]></dc:creator><pubDate>Sat, 07 Mar 2009 13:56:45 GMT</pubDate></item></channel></rss>