2012-02-18 3 views
2

현재 연결된 목록에 == 연산자가 오버로드되고 있습니다. 내가 좋아하는 설정 내 헤더에서 연산자를 가지고 다음과 같은 :이 방법은 가지 않습니다 호출 될 때오버로드 됨 == 함수가 호출되지 않습니다.

class sqrlst 
{ 
public: 
std::vector<int> vlist; 

bool operator == (iterator const & rhs) 
{ 
    return this->iter == rhs.iter; 
}; 

나는 다음 코드 그러나

void test() 
    { 
     bool flag; 
     if (vlist.begin()==vlist.begin()) 
     { 
      flag=true; 
     } 
    }; 
}; 

내 헤더 파일에 방법을 만들어 if 오버로드 된 == 연산자 함수에 전달합니다. 디버깅 포인트를 오버로드 함수에 놓으면 라인에 도달하지 못한다고합니다.

모든 요령이나 제안 사항을 매우 높이 평가합니다. 감사!

편집 : vlist는 int의 목록입니다.

+0

'begin()'은 어떤 타입을 반환합니까? – tzaman

+0

@tzaman iterator – Johnston

+1

'sq_list'에 대해'operator =='을 정의한 것처럼 보입니다. 그러나 당신이 수행하고있는 비교는'반복자'에 있습니다. 그렇다면'operator =='는 호출되지 않습니다. 'vlist == vlist'를 호출하면 호출됩니다. – Naveen

답변

3

std::vector<T>::iterator 형 또는 `std::vector<T>::const_iteratorstd::vector의 멤버 함수 begin()end() 반환 반복자 여부 벡터 객체에 따라서 const 비 CONST이다. 그것이 무엇이든, iterator 타입은 당신에 의해 정의되지 않습니다. 클래스에 ==이 오버로드되어 sqrlist은 아무 작업도 수행하지 않습니다. 오버로드 ==은 벡터의 반복기 클래스의 멤버 여야합니다. 이 아닌은 편집 할 수 있습니다.

벡터의 반복기 클래스에 이미 ==!= 연산자가 오버로드되어 있습니다. 따라서 ==을 사용하여 반복자를 비교할 때 vector iterator 클래스의 멤버 함수를 호출합니다.

+1

나는 iterator가 맞아야한다고 생각합니다. 나는 그것을 다시 바꿨다. 그리고 나는 const를 추가했다. 그러나 나의 브레이크 포인트는 아직도 도달하지 않을 것이다라고 말한다 – Johnston

+0

vlist는 나의 가치 목록이었다. 그리고 sq_list는 나의 클래스이었다 - 저기에 그것에 품고있는 것을위한 나의 실수는 전에있다. – Johnston

+0

@ Manankse : 좋은 사람! 편집 됨. – Nawaz

관련 문제