Ich habe einige Probleme mit der automatischen Typumwandlung zwischen shared_ptr
der geerbten Klassen.Std :: shared_ptr und Vererbung
Meine Klassenstruktur ist wie folgt, eine Basisklasse Base
und zwei abgeleitete Klassen Derived1
und Derived2
.
// Base class
class Base {
protected:
...
...
public:
Base() = default;
virtual ~Base() = default;
virtual void run() = 0;
...
...
};
// Derived class
class Derived1: Base {
protected:
...
...
public:
Derived1() = default;
virtual ~Derived1() = default;
void run() {...}
...
...
};
// Derived class
class Derived2: Base {
protected:
...
...
public:
Derived2() = default;
virtual ~Derived2() = default;
void run() {...}
...
...
};
Ich habe eine Funktion doSomething()
void doSomething(std::shared_ptr<Base> ptr) {
ptr->run();
...
}
ich die Funktion mit den abgeleiteten Klassen wie so nennen -
doSomething(make_shared<Derived1>())
doSomething(make_shared<Derived2>())
Aber ich erhalte eine Fehlermeldung, -
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
no viable conversion from 'shared_ptr<class Derived1>' to 'shared_ptr<class Base>'
Was? mache ich falsch? Ist es sicher, nur static_pointer_cast
zum Basistyp zu verwenden? Wie -
doSomething(static_pointer_cast<Base>(make_sahred<Derived2>()))
SOLUTION Mein schlechtes ... Das Problem war, dass ich die Basisklasse privat wurde vererben.
Welche Compiler ist es zu verwenden? Ich bekomme den Fehler auf dem neuesten Apple Clang ... – subzero
Sorry mein Schlechter ... Ich erbte die Klasse privat in meinem Code! Das war ein richtiger Anfängerfehler! – subzero
Wird shared_ptr automatisch (ohne Typ-Casting) in die Basisklasse shared_ptr konvertiert? Teilen sie die gleiche Referenzzahl? – abhiarora