gpt4 book ai didi

c++ - 无法使用自定义比较器功能对列表进行排序

转载 作者:太空宇宙 更新时间:2023-11-04 15:46:55 24 4
gpt4 key购买 nike

当我尝试使用我的自定义比较器对我的成分进行排序时,我遇到了这个编译器错误。

kitchen.cpp: In member function ‘void Kitchen::printContents(std::ofstream&)’:
kitchen.cpp:172: error: no matching function for call to ‘std::list<Ingredient, std::allocator<Ingredient> >::sort(<unresolved overloaded function type>)’
/usr/include/c++/4.2.1/bits/list.tcc:271: note: candidates are: void std::list<_Tp, _Alloc>::sort() [with _Tp = Ingredient, _Alloc = std::allocator<Ingredient>]
/usr/include/c++/4.2.1/bits/list.tcc:348: note: void std::list<_Tp, _Alloc>::sort(_StrictWeakOrdering) [with _StrictWeakOrdering = bool (Kitchen::*)(const Ingredient&, const Ingredient&), _Tp = Ingredient, _Alloc = std::allocator<Ingredient>]

这是导致它的代码:

bool sortFunction(const Ingredient a, const Ingredient b)
{
if (a.getQuantity() < b.getQuantity())
return true;
else if (a.getQuantity() == b.getQuantity())
{
if (a.getName() < b.getName()) return true;
else return false;
}
else return false;
}

void Kitchen::printContents(std::ofstream &ostr)
{
ostr << "In the kitchen: " << std::endl;

ingredients.sort(sortFunction);

std::list<Ingredient>::iterator itr;
for (itr = ingredients.begin(); itr != ingredients.end(); ++itr)
{
ostr << std::setw(3) << std::right << itr->getQuantity() << " "
<< itr->getName() << std::endl;

}
}

最佳答案

某处(例如Kitchen)可能有另一个sortFunction,导致上述错误。

尝试

ingredients.sort(::sortFunction);

类似于this question .

此外,为了良好的编码习惯,您可能需要更改

bool sortFunction(const Ingredient a, const Ingredient b)

bool sortFunction(const Ingredient &a, const Ingredient &b)

第一个是传递对象的拷贝,第二个只是传递一个引用。

关于c++ - 无法使用自定义比较器功能对列表进行排序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15142716/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com