Frage zu shared_ptr aus der boost library und explicit cast
-
Hallo zusammen!
Ich habe folgendes Stück Code
bool cBoard::addField(cFieldPtr field) { // .... if (field->isTarget()) mTargets.push_back( (cTargetFieldPtr) field ); // error C2440 return true; }Dabei ist deklariert
typedef boost::shared_ptr< cField > cFieldPtr; class cTargetField : public cField typedef boost::shared_ptr< cTargetField > cTargetFieldPtr; std::vector< cTargetFieldPtr > mTargets;Offenbar funktioniert ein explizites Casting von shared_ptr nicht, wie ich es eigentlich gedacht habe. Der Microsoft Compiler gibt mir Fehler C2440 beim Kompilieren:
error C2440: 'Initialisierung': 'nclib::adt::cField *const ' kann nicht in 'nclib::adt::cTargetField *' konvertiert werden Umwandlung von der Basis in die Ableitung erfordert 'dynamic_cast' oder 'static_cast'Stelle ich cTargetField* in den Vektor und benutze field.get(), so funktioniert es natürlich.
Ist es per se nicht möglich, explizit zu casten bei shared_ptr oder mache ich hier etwas falsch?
-
Die Boost Smart-Ptr bieten eigene Methoden zum Casten:
http://boost.org/libs/smart_ptr/shared_ptr.htm#static_pointer_cast
-
Funktioniert, besten Dank!