Problem beim Vererben einer Klasse



  • Hallo!

    Ich bin vor kurzem von Delphi auf c++ umgestiegen und habe jetzt ein Problem: Ich habe eine Klasse von der ich eine andere ableite. Bei der Abgeleiteten aber möchte der Compiler anscheinend den Constructor nicht akzeptieren, zumindest bekomme ich den Fehler:
    error C2226: syntax error : unexpected type 'std::string'

    #include <string>
    
    class CPrlException
    {
    public:
    	CPrlException(const std::string &strFile, unsigned int nLine, const std::string &strError);
    	void DisplayMessageBox();
    	void WriteToLog();
    	virtual void GenerateText();  // m_strError evtl. verändern
    	std::string m_strError, m_strFile;
    	unsigned int m_nLine;
    };
    
    class CPrlHrException: CPrlException
    {
    public:
    	CPrlHrException(const std::string &strFile, unsigned int nLine, const std::string &strError, const HRESULT hr); // FEHLER
    };
    

    Vielen Dank schonmal

    Pearly



  • Probier mal, obs geht wenn du aus

    class CPrlHrException: CPrlException
    
    class CPrlHrException: public CPrlException
    

    machst.
    Kann sein, dass da nochwas falsch ist, aber das muss jedenfalls geändert werden.
    Mit dem "public" gibst du an, dass

    • public-Elemente der Basisklasse auch in der abgeleiteten Klasse public sind
    • protected-Elemente der Basisklasse auch in der abgeleiteten Klasse protected sind

    Alternativ hast du zwei Möglichkeiten:

    • protected: public --> protected, protected --> protected
    • private: public --> private, protected --> private


  • Hmm hat leider nichts verändert aber troztdem thx

    Pearly



  • Sind beide Klassen in der gleichen Datei und sieht diese genau so aus wie in deinem ersten Beitrag gepostet?



  • Anders gesagt: Der gepostete Code ist korrekt, der Fehler liegt woanders 😉



  • Hallo

    Ja, wenn ich alles rausnehme was ich nicht gepostet hatte (#ifndef etc., ein #include), kommt der Fehler nach wie vor. Dass es sich um einen Constructor handelt scheint der Compiler doch zu erkennen, dass steht da nämlich wenn ich vor ihm ein int setze. (constructor with return type)
    Abgesehen von dem Syntax Error kommen übrigens noch

    error C2238: unexpected token(s) preceding ';'
    (in der selben Zeile) und

    error C2511: 'CPrlHrException::CPrlHrException(const std::string &,unsigned int,const std::string &,const HRESULT)' : overloaded member function not found in 'CPrlHrException'
    bei der Implementierung des Constructors

    Pearly



  • Pearly schrieb:

    Ja, wenn ich alles rausnehme was ich nicht gepostet hatte (#ifndef etc., ein #include), kommt der Fehler nach wie vor.

    Das hilft aber nicht weiter. In dem gezeigten Code ist kein Fehler (wenn man von der fehlenden Definition des Typen HRESULT mal absieht, irgendjemand wird halt windows.h einbinden). Möglicherweise steckt er in einem Header, der davor eingebunden wird. Zeig ein vollständiges Beispiel, das den Fehler reproduziert.



  • @MFK:
    ich denke, es ist die fehlende "windows.h"



  • Ja, es funktioniert jetzt! 🙂
    Danke für die schnelle Hilfe!

    Pearly


Anmelden zum Antworten