Ich habe einige der anderen Fragen zu diesem Thema gesehen, habe aber immer noch keine Antwort gefunden - ich denke ich vermisse etwas:
Ich habe zwei einfache Testklassen definiert:
%Vor% Ich habe typedefs deklariert, um ihre Verwendung mit std::shared_ptr:
Problem: Ich kann Code nicht kompilieren, um diese shared_ptr
-Deklarationen polymorph zu verwenden, obwohl base
in allen diesen Fällen tatsächlich eine Instanz von spDerived
ist:
%Vor%error: keine passende Funktion für den Aufruf von 'std :: shared_ptr :: shared_ptr (spBase & amp;)
%Vor%Fehler: Kann 'based' (vom Typ 'spBase {aka class std :: shared_ptr}') nicht 'spDerived {aka class' eingeben std :: shared_ptr} '(Ziel ist kein Zeiger oder Verweis)
%Vor%Fehler: Konvertierung von 'std :: shared_ptr & gt;' in nicht-skalaren Typ 'SpDerived {aka std :: shared_ptr}' angefordert
%Vor%Fehler: Konvertierung von 'std :: shared_ptr & gt;' in nicht-skalaren Typ 'SpDerived {aka std :: shared_ptr}' angefordert
Ich verwende C ++ 11 in einer Ubuntu 14.04-Box mit der Standard-GCC-Tool-Kette. Compiler ist gcc-4.9. Was mache ich falsch? Kann ein shared_pointer nicht polymorph verwendet werden?
Ein Typ, der an std::static_pointer_cast
und std::dynamic_pointer_cast
als erstes Typ-Template-Argument ist der Typ des konvertierten Zeigertyps selbst, nicht der Smart Zeigertyp:
Wenn Sie das sagen, können Sie es wie folgt nennen:
%Vor%Tags und Links gcc c++11 casting polymorphism shared-ptr