2011-12-26 2 views
0

아래 코드를 사용하여 2 개의 반복자와 객체를 취하여 발생 횟수를 확인하고 발생 횟수를 반환하는 일반 함수를 작성하려고합니다. 내 간단한 클래스 아래일반 함수에서 연산자 ==가 없습니다.

class person{ 

string name; 
int age; 

public: 
person(string n, int a): name(n), age(a) {} 
bool operator==(person &p); 

}; 

bool person::operator==(person &p){ 

return (name == p.name && age == p.age); 

} 

아래

는 일반적인 기능

template<typename Iter, typename Obj> 
int count_obj(Iter iter1, Iter iter2, Obj &obj){ 
int count = 0; 
for (; iter1 != iter2; iter1++){ 
    if((*iter1) == obj) 
    count += 1; 

} 

return count; 
} 

내 주요입니다 :

int main(){ 
vector<person *> myp; 

person a("ted", 21); person b("sun", 100); person c("ted", 21); 
myp.push_back(&a);myp.push_back(&b);myp.push_back(&c); 

cout<< "occurences for person objects " << count_obj(myp.begin(), myp.end(), a) << '\n'; 

} 

전체 오류

3b.cc: In function ‘int count_obj(Iter, Iter, Obj&) [with Iter = __gnu_cxx::__normal_iterator<person**, std::vector<person*> >, Obj = person]’: 
3b.cc:61:79: instantiated from here 
3b.cc:42:3: error: no match for ‘operator==’ in ‘iter1.__gnu_cxx::__normal_iterator<_Iterator, _Container>::operator* [with _Iterator = person**, _Container = std::vector<person*>, __gnu_cxx::__normal_iterator<_Iterator, _Container>::reference = person*&]() == obj’ 
make: *** [3b] Error 1 

나는이 오류가 발생하는 것을 알 수 없다.

답변

5

벡터의 벡터는 person *이며 person과 비교하려고합니다. 로 당신은 count_obj에 코드 줄을 수정해야합니다 중 하나 : 당신이 포인터 또는 개체를 비교하고자하는 여부에 따라

if ((*iter1) == &obj) 

:

if (*(*iter1) == obj) 

나.

[참고 : 표준 라이브러리에서 std::count 기능을 알고 있습니까?]

[참고 (2) : 다른 답변에서 언급했듯이 "const correctness"를 읽어야합니다. operator==const으로 지정해야하며 const 참조를 인수로 사용해야합니다.]

[참고 (3) : 원시 포인터를 컨테이너에 저장하는 것은 좋지 않은 아이디어입니다. 예를 들어, 효과적으로 메모리 누수가 있음을 알고 있습니까?]

+0

답장을 보내 주셔서 감사합니다. 실제로이 문제가있었습니다. 하지만 내 함수에 의해 반환 된 개수는 2 일 때 항상 1입니다. 문제가 될 수있는 것은 무엇입니까? – cody

+0

@cody : 제가 게시 한 첫 번째 변종을 사용하는 경우 귀하가 원하는 바를 수행해야합니다. –

+0

감사합니다. 나는 벡터를 사용하고 싶었다 myp; 그런 다음 객체를위한 push_back 참조를 사용하여 복사를 방지하십시오. 그래서 내 질문에 권장 push_back (& ​​a) 또는 그냥 push_back (a) 것입니다. 더 효율적인 참조입니까? – cody

관련 문제