Mögliche Exceptions in Definition - Compiler-Fehler bei Implementierung
-
Mein Problem liegt darin, dass der Compiler alle werfbaren Exceptions als Fehler ankreidet, sobald in der Funktionsdefinition nur ein throw(); auftaucht, obwohl dann doch das Werfen uneingeschränkt möglich wäre.
z.B.
#include <string> using std::string; class ThrowMe { public: explicit ThrowMe(const string& str) : str_(str) {} private: string str_; }; class ABC { public: void doThrow() throw(); // funzt auch nicht mit "throw(ThrowMe);" }; void ABC::doThrow() { if(true) throw ThrowMe("fehler!"); } int main() { try { ABC abc; abc.doThrow(); } catch(...) { return -1; } return 0; }
Fehler:
test.cpp:22: error: declaration of 'void ABC:doThrow()' throws different exceptions test.cpp:18: error: than previous declaration 'void ABC::doThrow() throw()'
Compiler: MinGW-G++ 3.3.1, Mandrake-G++ 3.3.1, Eigenbau G++ 3.4.3
g++ -fexceptions -o exc_test.xxx test.cppHoffe ihr könnt mir sagen wo der Fehler liegt.
mfg
-
Die Exception-Spezifikation muss bei Deklaration und Definition übereinstimmen.
Allerdings glaub ich, du hast was grundlegend missverstanden: throw() bedeutet, dass KEINE Exceptions ausgeworfen werden können. Der Sinn von Exception-Spezifikationen hält sich ansonsten ziemlich in Grenzen, du vergibst dir nichts, wenn du darauf verzichtest.
-
throw heißt doch, dass keine Exceptions geworfen werden können?
/Edit: Pressed the Bashar too l8.
MfG SideWinder
-
Aber:
class ABC { public: void doThrow() throw(ThrowMe) { throw ThroeMe("blubba"); } };
Sollte doch eigentlich schon funktionieren?
MfG SideWinder
-
Bashar schrieb:
throw() bedeutet, dass KEINE Exceptions ausgeworfen werden können.
Gut zu wissen. Fehler von mir.
SideWinder schrieb:
Aber:
class ABC { public: void doThrow() throw(ThrowMe) { throw ThrowMe("blubba"); } };
Sollte doch eigentlich schon funktionieren?
Ja, inline funzt es, sonst nicht. Habe ich da noch etwas übersehen?
mfg
-
Eventuell musst du es bei der Definition auch in den Funktionskopf schreiben?!
MfG SideWinder
-
terraner schrieb:
Habe ich da noch etwas übersehen?
Den ersten Satz meines Postings.
-
Bashar schrieb:
terraner schrieb:
Habe ich da noch etwas übersehen?
Den ersten Satz meines Postings.
Du schreibst zu unauffällig, ich habs auch überlesen
MfG SideWinder
-
Bashar schrieb:
Den ersten Satz meines Postings.
hm... hey, du hast recht!
Danke Bashar und SideWinder!
mfg