【问题标题】:sorting a list of pointers c++ - no matching function error排序指针列表c ++ - 没有匹配的函数错误
【发布时间】:2016-03-02 17:04:04
【问题描述】:

我正在尝试按类的特定参数对指针列表进行排序,为此工作了将近一个小时。它给了我错误:

/src/ClassifyById.cpp:26:25: error: no matching function for call to
‘std::list<Worker*>::sort(<unresolved overloaded function type>)’

在搜索时我发现了这个: Problem sorting a list of pointers

但这不是我的情况,我不明白为什么我的代码不起作用。据我所知,我不能在这个作业中使用仿函数。 这是我的代码:

#include "ClassifyById.h"
#include "Worker.h"
#include <algorithm>

void ClassifyById::classify(list<Worker*> toClassify) {

    toClassify.sort(compare);  //ERROR### 
 }

bool ClassifyById::compare(Worker* a, Worker* b){
    return (a->getId() < b->getId()); 
}

为什么不编译?

【问题讨论】:

    标签: c++ eclipse list sorting


    【解决方案1】:

    您的compare() 函数是一个非static 成员函数,它需要三个参数:除了要比较的实体之外,它还需要this 指向的对象。微不足道的解决方法是使成员 static 或将其完全变成非成员函数。

    但是,如果您的目标是获得良好的性能,最好使用带有 inline 函数调用运算符的比较器对象:通过函数指针的调用通常不能内联,而 inline 函数调用运算符是微不足道的内联。

    【讨论】:

    • 有没有办法让方法成为朋友?因为我尝试了一个内部类,并且我尝试将“比较”方法内联,但它仍然无法编译
    • 您的意思是,当ClassifyById 的成员没有此问题时,您会因为不允许访问该成员而收到错误消息?您可以从函数调用运算符委托给ClassifyByIdstatic inliine 成员,或者使用函数调用运算符将​​类设为friend。我认为我可以将类的成员函数设为friend,但我通常不使用friends - 我喜欢的设计似乎不需要它们。
    • 它确实适用于“静态 inine bool..”。也许我会为这种方法使用不同的类.. 谢谢!!
    猜你喜欢
    • 1970-01-01
    • 2019-03-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-01-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多