7

현재 == 연산자에 대한 오버로드 된 함수를 만드는 중입니다. 내 연결된 목록에 대한 hpp 파일을 만들고 있는데 hpp 파일에서이 연산자를 사용할 수없는 것 같습니다.== 함수 오버로드

나는 현재이 있습니다

template <typename T_> 
class sq_list 
{ 

bool operator == (sq_list & lhs, sq_list & rhs) 
{ 
    return *lhs == *rhs; 
}; 

reference operator *()  { 
     return _c; 
    }; 

}; 
} 

나는 약 10 오류가 발생할 수 있지만 오류와 같은 꽤 많이 반복 :

C2804 : 이진 '연산자 ==는'너무 많은 매개 변수
에게 C2333이있다 : 'sq_list :: operator ==': 함수 선언 오류. 함수 본문 건너 뛰기
C2143 : 구문 오류 : ';'이 없습니다. before '*'
C4430 : 유형 지정자가 누락되었습니다. - int로 가정합니다. 참고 : C++ 기본-INT 내가 주위에 물건을 변경하려고했지만 내가 constanly

어떤 조언이에 도움이 위와 같은 오류를 얻을

크게 감사를 지원하지 않습니다.

+0

당신은 sqlist가 필요합니다 Flexo

+0

그리고 그것이 회원 기능이라면 그것은 하나의 예술을 취해서 – Flexo

+0

@awoodland를 사용합니다 : 아니오, 그렇지 않습니다; 클래스 템플릿 정의 내에서 템플릿 이름 만 현재 템플릿 인스턴스를 참조 할 수 있습니다. 그리고 어쨌든 OP 코드에는 'T'가 없습니다. –

답변

7

회원 운영자는 다른 개체 인 하나만 인수를가집니다. 첫 번째 객체는 인스턴스 자체입니다.

template <typename T_> 
class sq_list 
{ 
    bool operator == (sq_list & rhs) const // don't forget "const"!! 
    { 
     return *this == *rhs; // doesn't actually work! 
    } 
}; 

이 정의는 실제로 재귀 적으로 호출하기 때문에 실제로 이해가되지 않습니다. 대신, 일부 구성원 작업 (예 : return this->impl == rhs.impl;)을 호출해야합니다.

0

인스턴스 정의에 따라 클래스 정의의 일부로 == overload를 선언합니다. 따라서 사용자가 요청한 첫 번째 매개 변수 lhs은 이미 암시 적입니다. 즉, 인스턴스의 메서드 내에서 this에 액세스 할 수 있음을 기억하십시오. 클래스의 일부로

class myClass { 
    bool operator== (myClass& other) { 
     // Returns whether this equals other 
    } 
} 

운영자 ==() 메소드는 "이 개체가 다른 방법으로 그 자체를 비교하는 인식"으로서 이해되어야한다.

operator ==() 연산자를 오버로드하여 두 개의 인수를받을 수 있습니다. 두 개의 인수가 모두 비교되는 경우 두 개의 인수가 더 적합합니다. 여기를 참조하십시오 : http://www.learncpp.com/cpp-tutorial/94-overloading-the-comparison-operators/

0

http://courses.cms.caltech.edu/cs11/material/cpp/donnie/cpp-ops.html

비교 연산자는 매우 간단합니다. 이 같은 함수 서명을 사용하여, 첫째 == 정의 :

MyClass의 객체를 비교하는 방법
bool MyClass::operator==(const MyClass &other) const { 
    ... // Compare the values, and return a bool result. 
    } 

모두 자신이다.