所以我想使用對象函數對子類中的數組進行排序。母類是通用的。在C++中使用自定義函數對數組進行排序,其中母類是通用的
template<typename T>
class MotherClass
{
public:
/* some code */
std::list<T*> getList();
private:
std::list<T*> list_;
}
子類使用另一個類爲模板
class OtherClass
{
public:
/* some code */
std::string getName() const;
private:
std::string name_;
}
這裏是仿函數類
class Functor
{
public:
/* some code */
bool operator() (OtherClass* a, OtherClass* b) const
{
return a->getName() < b->getName();
}
}
最後,這裏是子類
class ChildClass : public MotherClass<OtherClass>
{
public:
/* some code */
friend std::ostream& operator<<(std::ostream& o, const ChildClass& child);
}
std::ostream& operator<<(std::ostream& o, const ChildClass& child)
{
Functor functor;
std::sort(child.getList().begin(), child.getList().end(), functor);
/* some code */
}
當我評論排序行ChildClass,解決方案構建沒有任何問題。雖然,當它在那裏,這個錯誤發生。
錯誤C2784: '未知類型的std ::運營商 - (標準:: move_iterator < _RanIt> &,常量的std :: move_iterator < _RanIt2> &)':不能推導出模板參數爲「的std :: move_iterator < _RanIt「從 'STD> & :: _ List_unchecked_iterator >>'
任何人都可以幫忙嗎?
請提供[mcve]。我不明白你的代碼。例如在'operator <<'中,您對'child'列表進行排序,但參數'child'是'const' – user463035818
您的'child.getList()'返回一個值,因此'child.getList()。begin() '和'child.getList()。end()'是來自兩個不同容器的迭代器 – user463035818
您提供了第一條錯誤消息還是最後一條錯誤消息?第一個更重要。 – aschepler