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...


Anmelden zum Antworten