class
을 key
으로 지정하고 map
에 넣으므로 operator+
을 오버로드합니다. 친구 기능으로 과부하하면 잘 작동합니다. 클래스의 멤버 함수로 오버로드하면 컴파일 오류가 발생합니다.보다 작음 연산자를 멤버 함수로 오버로드 할 수 없습니다.
error C2678: binary '<': no operator found which takes a left-hand operand of type 'const Syl' (or there is no acceptable conversion)'.
세부 정보,이 컴파일하고 컴파일 오류를 생성하지 않습니다
Syl.h
bool operator< (const Syl& rhs);
Syl.cpp
bool Syl::operator< (const Syl& rhs) { return false; }
을이 컴파일하는 동안.
Syl.h
friend bool operator< (const Syl& lhs, const Syl& rhs);
Syl.cpp
bool operator< (const Syl& lhs, const Syl& rhs) { return false; }
나는 이유를 알고하지 않습니다. 나는 연산자가 <이 바이너리라는 것을 알고 있지만 어쨌든 함수 멤버로 오버로드 할 수 있습니까?
과부하 해결 방법과 암시 적 변환이 작동하기 때문에 어쨌든 '친구'버전이 더 좋습니다. –
친숙한 버전은 양쪽 피연산자를'const'로 지정합니다. 다른 버전은 입력 매개 변수가'const'라고 말합니다. 메소드를 이와 같이 표시해야합니다 ... 오류를주의 깊게 읽어야하고,'const','signed' 등과 같은 단어의 의미에 특별한주의를 기울여야합니다. – Kupto