2017-07-10 8 views
0

Der folgende Code wird nicht kompiliert. Es gibt einen Fehler auf der 2. bis zur letzten Zeile (nth_element ...). Es scheint mit dem Komparator verwandt zu sein. Compiler behauptet, dass "Begriff nicht zu einer Funktion ausgewertet wird, die 2 Argumente nimmt". Wie behebe ich den Kompilierungsfehler?C++ Vektor Iterator Nth_element Kompilierfehler

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; 

Antwort

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

sollte

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

wahrscheinlich hilfreich sein, wäre eine Erklärung hinzuzufügen. – jodag

+0

Dank Jarod42, das hat es behoben. – PentiumPro200