2013-09-05 2 views
2

내가 지금 같은 클래스의 연산자보다 낮은 과부하하고보다 과부하 :운영자

#include<string> 
using namespace std; 

class X{ 
public: 
    X(long a, string b, int c); 
    friend bool operator< (X& a, X& b); 

private: 
    long a; 
    string b; 
    int c; 
}; 

하고 구현 파일은 :

이시키는되지 그러나
#include "X.h" 


bool operator < (X const& lhs, X const& rhs) 
{ 
    return lhs.a< rhs.a; 
} 

내게는 a 데이터에 액세스 구현 파일에있는 a은 개인 데이터 멤버로 선언 되었기 때문에 X 개체를 통해이 멤버가 구현 되었습니까?

답변

11

친구 기능은 함수 정의 된 함수와 동일한 서명을하지 않습니다

friend bool operator< (X& a, X& b); 

bool operator < (X const& lhs, X const& rhs) 
//     ^^^^^   ^^^^^ 
당신은 단지 당신의 헤더 파일에 줄을 변경해야

:

friend bool operator< (X const& a, X const& b); 
//      ^^^^^  ^^^^^ 

비교 연산자 내에서 개체를 수정하지 않으므로 const 참조.

7

사용하려는 친구 기능과 다른 친구 기능을 선언했습니다. 당신이 필요합니다

friend bool operator< (const X& a, const X& b); 
//      ^^^^^  ^^^^^ 

어쨌든 비교 연산자가 비 const 참조를 취하는 것은 합당하지 않습니다.

+0

확인 downvoter,이 대답은 무엇이 잘못 되었나요? – juanchopanza