error: must use '.*' or '->*'
"。
我昨晚在谷歌上花了很多时间,但没有设法弄清楚如何解决这个问题。
这是我的代码:
bool Directory::pointerStringSort(BaseFile *file1, BaseFile *file2) {
return file1->getName() < file2->getName();
void Directory::sortByName() {
if (children.empty()) return;
sort(children.begin(), children.end(), pointerStringSort);
完整错误:
error: must use '.*' or '->*' to call pointer-to-member function in '((__gnu_cxx::__ops::_Val_comp_iter<bool (Directory::*)(BaseFile*, BaseFile*)>*)this)->__gnu_cxx::__ops::_Val_comp_iter<bool (Directory::*)(BaseFile*, BaseFile*)>::_M_comp (...)', e.g. '(... ->* ((__gnu_cxx::__ops::_Val_comp_iter<bool (Directory::*)(BaseFile*, BaseFile*)>*)this)->__gnu_cxx::__ops::_Val_comp_iter<bool (Directory::*)(BaseFile*, BaseFile*)>::_M_comp) (...)'
{ return bool(_M_comp(__val, *__it)); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~
我将不胜感激任何帮助。谢谢!
答案 0 :(得分:0)
_M_comp()
必须是没有上下文的功能对象,即没有&#39;这个&#39;必需或具有重载operator()
的对象。在后者的情况下,您必须提供实际的实例。选项包括:
operator()
了解详情:Compare concept。
答案 1 :(得分:0)
两件事:
正如StoryTeller所说,您要将Directory::pointerStringSort
声明为static
的{{1}}方法。
此外,您希望将Directory
传递给&Directory::pointerStringSort
。为了向后兼容C,普通函数不需要&符号来获取它们的地址(隐式转换)。这仅适用于函数,而不适用于对象,在C ++中,此异常也不适用于成员函数(C没有它们)