Ungültige Typumwandlung mit static_cast, was richtige casting sollte ich verwenden?

Habe ich eine Art definition von typedef vector<Object*> ObjList; ich habe auch eine Funktion vector<BigObject*>* ObjectBox::getBigObjectList();. BigObject ist inhertied von Object

Was ich wollte, zu tun ist, um eine vector<BigObject*>* aus getBigObjectList() und konvertieren Sie es in vector<Object*>*, das ist ein nach oben Gießen, und dieser Typ ist definiert als ObjList so dass ich im Grunde wollte, um Gespräche, die in einer ObjList Typ

Ich habe zwei Möglichkeiten, die erste ist

ObjList *normalObjectList = (ObjList*) box->getBigObjectList();

Diese kompiliert und ich lese aus diesem Artikel ( Wann sollte static_cast, dynamic_cast, const_cast und reinterpret_cast verwendet werden? ), die sagt, dass C-style casting ist selten wünschenswert, da es sein kann, develped in eine reinterpret-cast

Dann versuche ich zu nutzen static_cast, aber ich bekam eine Fehlermeldung Ungültige Typ-Konvertierung

ObjList *normalObjectList = static_cast<ObjList*> (box->ClipObjectInRect());

Weder wird diese Arbeit

ObjList *normalObjectList = static_cast<vector<Object*>*> (box->ClipObjectInRect());

Warum das nicht funktioniert? Ist dies, weil static_cast können nur verwendet werden, um werfen der direkten Klasse (wie Object selbst) anstatt einer verschachtelten (ich bin nur Total raten hier)? Was soll ich tun in diesem Fall?

static_cast cant cast zu nicht verwandten Arten
Ich weiß nicht, was du genau meinst, nichts zu tun haben-Typen, da sind Sie Vektoren von geerbten Typen und ist ausdrücklich definiert mit typedef.

InformationsquelleAutor ryf9059 | 2013-01-30

Schreibe einen Kommentar