2014-02-06 11 views
18

sagen, dass ich eine Klasse A und Klasse B haben, die so aussehen:std :: find 'Fehler keine passende Funktion'

Class A 
{ 
private: 
    int a; 
public : 
bool operator==(const A &) const; 
//other methods(...) 
} 

Class B 
{ 
private: 
std::vector<A> v; 
public: 
std::vector<A> &get_v() {return v;}; 
const std::vector<A>& get_v() const; 
} 

Nun, wenn ich das tun:

B b; 
std::vector<A>::iterator it; 
it=std::find (b.get_v().begin(), b.get_v().end(), an item of class A); 

Die Fehler, den ich bekomme ist

error: no matching function for call to 'find(std::vector<A>::iterator, std::vector<A>::iterator, A&) 

Fehle ich etwas? Dank

Antwort

50

Sie haben vergessen zu #include <algorithm>.

+0

Ja, ich habe es herausgefunden! Dank – chiva

+9

Nizza, kryptische C++ Fehlermeldungen. Anstatt zu sagen, dass std :: nicht finden kann (wegen der fehlenden enthalten) gefunden werden, heißt es Template-Argument Abzug/Substitution fehlgeschlagen. – Nuclear

+1

@Nuclear Der Punkt ist, dass ** an ** 'std :: find()' gefunden werden kann, aber es ist eine Überladung mit einer anderen Signatur aus einer anderen Kopfzeile, die nicht die ist, nach der das OP gesucht hat. C++ ist in diesem Fall vollkommen korrekt, um zu beschweren, dass die übergebenen Argumente keine Auflösung für eine deklarierte Überlastung ermöglichen. Wenn die Ursache darin liegt, dass _ "std :: find nicht gefunden werden kann" _, dann wäre der Fehler _ "std :: find wurde in diesem Bereich nicht deklariert" _ oder ähnliches. –

3

Ich glaube, Sie haben Header vergessen <algorithm>

Verwandte Themen