main类中,我有一个指针 vector (vector<Corsa*> listaCorse)
我想将Corsa*对象插入我的有序 vector 中
所以我创建了一个迭代器,然后将其传递给listaCorse.begin(), listaCorse.end(), myPointerToTheObject, &sortFunction)
解决了:我不知道为什么,但是我只包含算法和 vector ,现在可以编译。
我真的不知道为什么,因为我将它们包含在myhugeclass.h文件中,但是它可以工作,没关系
谢谢大家 :)

问题:sortFunction是我的“Corsa”类中的静态函数。而且它超载。
这两个原型(prototype)开发者是:

bool Corsa::cmpCorse(Corsa *a, Corsa *b)
bool Corsa::cmpCorse(Corsa &a, Corsa &b)

显然,我想将第一个传递给他,因为我是指针的 vector
但是我的编译器不太喜欢我的代码,所以它说我“无法解析的重载函数类型”

谁能帮我? :)
非常感谢
这是代码片段:
// corsa.h
class Corsa{
    ...
    static int cmpCorsa(const Corsa& a, const Corsa& b);
    static int cmpCorsa(const Corsa *a, const Corsa *b);
    ...
}

// myhugeclass.cpp
int MyHugeClass::addCorsa(Corsa *a){
    vector<Corsa*>::iterator low = lower_bound(listaCorse.begin(), listaCorse.end(), c, &Corsa::cmpCorsa);
    listaCorse.insert(low, c);
    return 0;
}

谢谢 :)

编辑:我犯了一个大错误,但与此错误无关。我传递了错误的函数,我应该传递static bool Corsa::sortCorsa(Corsa *a, Corsa *b)而且这个功能是重载的
就像克里斯说的(谢谢克里斯),我尝试这样做:
int MyHugeClass::addCorsa(Corsa *c){

    typedef bool(*Func)(const Corsa*, const Corsa*);
    vector<Corsa*>::iterator low = lower_bound(listaCorse.begin(), listaCorse.end(), c, static_cast<Func>(&Corsa::sortCorsa));
    listaCorse.insert(low, c);
    return 0;
}

现在错误在[Error] no matching function for call to 'lower_bound(std::vector<Corsa*>::iterator, std::vector<Corsa*>::iterator, Corsa*&, bool (*)(const Corsa*, const Corsa*))'中更改

最佳答案

这是一个使用std::sort干净编译的完整示例。注意typedef和强制类型转换

#include <algorithm>
#include <vector>
struct Corsa
{
    static bool cmpCorsa(const Corsa& a, const Corsa& b);
    static bool cmpCorsa(const Corsa *a, const Corsa *b);
};

typedef bool (*fn)(const Corsa*, const Corsa*);
int main()
{
   std::vector<Corsa*> C;
   std::sort(C.begin(), C.end(), static_cast<fn>(&Corsa::cmpCorsa));
}

关于c++ - C++重载函数和错误,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/22818009/

10-11 19:29