Problem mit Konstruktoren
-
Hi,
Kann mir einer sagen wie ich diese Konstruktor-Definition "richtig" schreibe, damit also keine Fehlermeldung kommt:EInvalidType::EInvalidType(int type, int x, int y) { // Hier kommt die Fehlermeldung: E2251 Standardkonstruktor zum // Initialisieren der Basisklasse 'runtime_error' nicht gefunden strstream ss; ss << "invalid type \"" << type << "\" at [" << x << ", " << y << "]"; runtime_error( ss ); // Kontruktor der übergeordneten Klasse }
Ich benutze den C++Builder 5.0 (für den Fall falls es ein Compilerspeziefisches Problem ist)
Es sollte aber ohne Templates gelöst werden.
Also nicht template<int type, int x, int y> ...Dank, im Voraus.
-
Basisklassenkonstruktoren musst du in der Initialisierungsliste aufrufen.
-
Und wie kann ich dort alle Parameter(type, x, y) + Beschreibung in einen String verpacken, den ich dann dem Konstruktor übergeben kann? Imo funktioniert das nicht.
-
Vielleicht bietet runtime_error andere Konstruktoren, oder es gibt andere Funktionen, mit denen man diese Information nachträglich übergeben kann.
Wenn du uns runtime_error nicht zeigst, kann dir da keiner helfen.
-
Die runtime_error-Klasse ist aus der STL.
Die Implementierung auf meinem Rechner sieht so aus:class _RWSTDExport runtime_error : public exception { public: runtime_error (const string& what_arg) _RWSTD_THROW_SPEC_NULL : str_(what_arg) { ; } virtual ~runtime_error () _RWSTD_THROW_SPEC_NULL; virtual const char * what () const _RWSTD_THROW_SPEC_NULL { return str_.data(); } private: string str_; };
EDIT: Wenn ich es so betrache, dann kann man doch what() überschreiben?. Ich werde es auch so machen.
-
Ich bastel mir dann immer eine private statische Funktion, die die Konstruktorargumente zusammensetzt. Ist natürlich etwas blöd, geht in C++ aber leider nicht anders...