Betrachten Sie das folgende ProgrammFehler C2672: ‚Operator __surrogate_func‘: keine passende überlastet gefunden Funktion, wenn std :: upper_bound
struct slot {
int item;
bool operator<(const int& right) const {
return item < right;
}
slot(int item) : item(item) {}
};
int main() {
std::vector<slot> rails;
std::lower_bound(cbegin(rails), cend(rails), 5);
std::upper_bound(cbegin(rails), cend(rails), 5);
}
Ich bin mit std :: upper_bound um binäre Suche einen Vektor aber fehlschlägt, während
Kompilierenc:\program files (x86)\microsoft visual studio 14.0\vc\include\algorithm(2609): error C2672: 'operator __surrogate_func': no matching overloaded function found
In Anbetracht der Tatsache, dass std::upperbound
operator<
für implizite Vergleich verwendet, ohne ein Prädikat verwendet wird, kann ich nicht einen berechtigten Grund für den Compiler zu meckern finden. Außerdem ist die Fehlermeldung nicht ganz sinnvoll, da ich hier keinen Grund sehe, eine Ersatzfunktion zu verwenden. Auch wenn es sich um einen Funktor less<>
handelt, sollte dies kein Problem sein, da slot
weniger mit einer Ganzzahl vergleichbar ist. Es ist erwähnenswert, dass std::lower_bound
eine akzeptable Syntax hat.
Siehe: http://rextester.com/WKK72283
Wo ist der 'return' in Ihrem Betreiber Umsetzung? – AnT
@AnT: Obwohl die Rückkehr sollte da sein, aber das sollte nicht der Grund sein, kompilieren, um zu scheitern – Abhijit
Sie finden den Rest in meiner Antwort unten. – AnT