在指向抽象类

时间:2017-11-23 11:19:55

标签: c++

早上好! 我使用sort方法对矢量进行排序。但是,我收到错误消息" 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)); }
^~~~~~~~~~~~~~~~~~~~~~~~~~~

我将不胜感激任何帮助。谢谢!

2 个答案:

答案 0 :(得分:0)

_M_comp()必须是没有上下文的功能对象,即没有&#39;这个&#39;必需或具有重载operator()的对象。在后者的情况下,您必须提供实际的实例。选项包括:

  1. 提供免费功能;
  2. 在类中提供静态函数;
  3. 提供lambda;
  4. 提供具有重载operator()
  5. 的对象的实例

    了解详情:Compare concept

答案 1 :(得分:0)

两件事:

正如StoryTeller所说,您要将Directory::pointerStringSort声明为static的{​​{1}}方法。

此外,您希望将Directory传递给&Directory::pointerStringSort。为了向后兼容C,普通函数不需要&符号来获取它们的地址(隐式转换)。这仅适用于函数,而不适用于对象,在C ++中,此异常也不适用于成员函数(C没有它们)