[solved] operator << für abstrakte basisklasse



  • hi!

    ich hab folgendes problem: ich hab eine abstrakte basisklasse, für die ich den << operator überladen habe. wenn ich nun davon abgeleitete klassen auf den outstream schreiben möcht, kommt folgende fehlermeldung vom vs:

    Error 2 error C2243: 'type cast' : conversion from 'Rect *__w64 ' to 'Figure &' exists, but is inaccessible c:\prog\test\templatetest\main.cpp 16

    der code schaut so aus:

    class Figure
    {
    public:
    
        // ...
    
        virtual string& ToString() = 0;
    
        friend ostream& operator << ( ostream& outstream, Figure& f );
    };
    
    class Rect : Figure
    {
    public:
    
        // ...
        string& ToString();
    };
    
    string& Rect::ToString()
    {
        return string( "rect" );
    }
    
    int main( char **argv, int args )
    {
        Rect r( 5, 2 );
        cout << r;
    }
    

    was is falsch bzw. warum geht das nicht, oder is das so garnet möglich? ich muss doch net etwa für jede klasse den operator << neu überladen wenn der immer das selbe macht?

    danke schonmal!



  • Du musst die Vererbung öffentlich machen:

    class Rect : public Figure
    

    Ansonsten werden die public-Elemente aus Figure als private in Rect übernommen und werden somit von außen nicht aufrufbar.



  • achgott, grad hab ichs rausgefunden. DANKE! wenn ma vo c# wieder auf c++ zurückwechselt versteht ma manchmal die welt nimmer 😉


Anmelden zum Antworten