私は2つのリスト(listsub1 & listsub2)を持っており、それらをpush_backと組み合わせて1つ(listclass)にします。C++:サブクラス(typedefs)を使用して2つのリストから1つのリストを作成
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);
}
これを正しく行うにはどうすればよいですか? エラーメッセージは次のとおりです。
error: no matching function for call to 'std::list<std::shared_ptr<Basisclass> >::push_back(const std::shared_ptr<Subclass1>&)'
listclass.push_back(pSubclass1);
'Subclass1'から' Basicclass'にアップキャストポインタが必要なようです。とにかくそれを平坦化しようとするならば、派生クラスのリストを持つことは不幸です。 – hauron
['std :: static_pointer_cast'](http://en.cppreference.com/w/cpp/memory/shared_ptr/pointer_cast) – NathanOliver
アップキャストは暗黙的に行われるべきです。このエラーは 'Subclass1'が' Basisclass'から派生したものではないことを示唆していますが、コードが不完全であるためわかりません。 –