【发布时间】:2025-12-09 00:50:02
【问题描述】:
实际问题:我将我的函数命名为'sort',它在没有指定std的情况下调用了sort,现在我觉得很愚蠢。
解决方案:重命名我的函数并从现在开始显式调用 std::sort (就像我的教授以外的每个人都建议我这样做)。
我试图通过根据该类中的字符串对类(Song)指针的向量(cat)进行排序来找出 std::sort。
我正在专门尝试调整此解决方案std::sort() on a vector of Class pointers,但没有成功。
我能想到的最好的是:
void Catalog::sort()
{
sort(cat.begin(), cat.end(), compareTitle );
return;
}
bool compareTitle(Song* a, Song* b)
{
return(a->getTitle().compare(b->getTitle()) < 0);
}
这里的 compareTitle 不是类函数。编译器返回
catalog.cpp: In member function ‘void Catalog::sort()’:
catalog.cpp:62:44: error: no matching function for call to ‘Catalog::sort(std::vector<Song*>::iterator, std::vector<Song*>::iterator, bool (&)(Song*, Song*))’
62 | sort(cat.begin(), cat.end(), compareTitle );
| ^
catalog.cpp:59:6: note: candidate: ‘void Catalog::sort()’
59 | void Catalog::sort()
| ^~~~~~~
catalog.cpp:59:6: note: candidate expects 0 arguments, 3 provided
我也试过
void Catalog::sort()
{
sort(cat.begin(), cat.end(), [](Song* a, Song* b){
return(a->getTitle().compare(b->getTitle()) < 0);
});
return;
}
这给了我
catalog.cpp: In member function ‘void Catalog::sort()’:
catalog.cpp:66:7: error: no matching function for call to ‘Catalog::sort(std::vector<Song*>::iterator, std::vector<Song*>::iterator, Catalog::sort()::<lambda(Song*, Song*)>)’
66 | } );
| ^
catalog.cpp:59:6: note: candidate: ‘void Catalog::sort()’
59 | void Catalog::sort()
| ^~~~~~~
catalog.cpp:59:6: note: candidate expects 0 arguments, 3 provided
感谢任何建议;我的搜索没有结果。
【问题讨论】:
-
也许你忘记了“using namespace std;”或“#include