2014-02-06 2 views
18

내가 그 같이 클래스 A와 클래스 B가 있다고 가정 :표준 : 찾기 '오류 일치 기능'

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; 
} 

을 이제 내가 할 때를 그 :

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

오류가 발생했습니다

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

내가 뭔가를 잃어버렸나요? 감사합니다

답변

50

당신은 #include <algorithm>을 잊어 버렸습니다.

+0

그래, 알아 냈어! 감사합니다. – chiva

+9

멋진 Cryptic C++ 오류 메시지. 대신 std :: find를 찾을 수 없기 때문에 (include가 빠져 있기 때문에), 템플릿 인수 공제/대체가 실패했다고 말합니다. – Nuclear

+1

@Nuclear 요점은 ** ** std :: find()가 발견 될 수 있지만 OP가 찾고 있던 헤더가 아닌 다른 헤더와 다른 서명으로 오버로드 된 것입니다. C++은이 경우 전달 된 인수로 선언 된 오버로드를 해결할 수 없다는 불평을하는 것이 이상적입니다. 원인이 _ "std :: find를 찾을 수 없음"_ 인 경우 오류는 _ "std :: find가이 범위에서 선언되지 않았습니다"_ 등입니다. –

3

당신이 잊어 버린 것 같아요 헤더 포함 <algorithm>