2017-07-10 4 views
0

Le code ci-dessous ne compilera pas. Il y a une erreur sur le 2ème à la dernière ligne (nth_element ...). Il semble être lié au comparateur. Revendications du compilateur "le terme n'évalue pas à une fonction prenant 2 arguments". Comment puis-je corriger l'erreur de compilation?itérateur de vecteur C++ nth_element erreur de compilation

struct Result { 
     Result(unsigned int id, double result); 
     bool cmp(const Result &a, const Result &b) const; 

     unsigned int id; 
     double result; 
    }; 


Result::Result(unsigned int id, double result) { 
    this->id = id; 
    this->result = result; 
} 

bool Result::cmp(const Result &a, const Result &b) const { 
    if(a.result < b.result) { 
     return true; 
    } 
    return false; 
} 

    //25th-percentile 
    int index = (int) ((buffer.size()+1.0)/4.0 - 0.499); 
    vector<Result>::iterator itrindex = buffer.begin() + index; 
    nth_element(buffer.begin(), itrindex, buffer.end(), &Result::cmp); 
    double twentyfifthperc = buffer[index].result; 

Répondre

3
bool cmp(const Result &a, const Result &b) const; 

devrait être

static bool cmp(const Result &a, const Result &b); 
+0

serait probablement utile d'ajouter une explication. – jodag

+0

Merci Jarod42, qui l'a réparé. – PentiumPro200