J'ai deux listes (listsub1 & listsub2) et je veux les combiner avec push_back à un (listclass).C++: Créer une liste sur deux listes avec des sous-classes (typedefs)
class Subclass1 : public Basisclass {...};
class Subclass2 : public Basisclass {...};
//...
typedef std::list<std::shared_ptr<Basisclass> > ListClass;
typedef std::list<std::shared_ptr<Subclass1> > ListSubclass1;
typedef std::list<std::shared_ptr<Subclass2> > ListSubclass2;
//...
ListSubclass1 listsub1 = ...
ListSubclass2 listsub2 = ...
//...
ListClass listclass;
for (const std::shared_ptr<Subclass1> pSubclass1 : listsub1)
{
listclass.push_back(pSubclass1);
}
for (const std::shared_ptr<Subclass2> pSubclass2 : listsub2)
{
listclass.push_back(pSubclass2);
}
Comment faire cela correctement? Voici le message d'erreur:
error: no matching function for call to 'std::list<std::shared_ptr<Basisclass> >::push_back(const std::shared_ptr<Subclass1>&)'
listclass.push_back(pSubclass1);
Il semble que vous ayez besoin de déplacer les pointeurs de 'Sous-classe1' à 'Basique '. Plutôt malheureux d'avoir des listes de classes dérivées, si vous allez l'aplatir quand même. – hauron
['std :: static_pointer_cast'] (http://www.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast) – NathanOliver
Le upcast devrait se faire implicitement. L'erreur suggère que 'Subclass1' n'est pas dérivé de' Basisclass', mais comme le code est incomplet, nous ne pouvons pas le dire. –