두 목록 (listsub1 & listsub2)을 가지고 있으며 이들을 하나의 (listclass)에 push_back과 결합하려고합니다.C++ : 하위 목록 (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);
}
어떻게하면 제대로 할 수 있습니까? 다음은 오류 메시지입니다.
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'에서 파생되지 않았 음을 시사합니다. 그러나 코드가 불완전하기 때문에 우리는 말할 수 없습니다. –