저는 수학 객체에 대한 추상화 클래스를 작성하고 모든 연산자를 정의했습니다. 그것을 사용하는 동안, 나는 가로 질러 온 :적절한 빼기 연산자 정의
Fixed f1 = 5.0f - f3;
나는 두 뺄셈 연산자 정의 :
inline const Fixed operator -() const;
inline const Fixed operator - (float f) const;
나는 여기에서 잘못된 것은 얻을 - 또한이 스왑 (1 + 2 == 2 + 1)입니다 뺄셈은 아닙니다 (곱셈과 나눗셈에 대해서도 동일합니다). 나는 즉시 외부에서이 같은 내 클래스 함수 를 썼다 :
static inline const Fixed operator - (float f, const Fixed &fp);
을하지만 그때 나는 키워드 friend
를 사용하여 어떤 결과 클래스의 음부를 터치했을 것이라고 할 때문에이 수행 할 수 없습니다 실현 나는 싫어하고 '정적 인'불필요한 기능으로 네임 스페이스를 오염시킨다. 클래스 정의 수율 내부 GCC-4.3이 오차 함수을 이동
:
error: ‘const Fixed Fixed::operator-(float, const Fixed&)’ must take either zero or one argument
: error: ‘static const Fixed Fixed::operator-(float, const Fixed&)’ must be either a non-static member function or a non-member function
은 GCC가 제안 하하고 그것을 비 정적 기능을 다음과 같은 오류가 발생
왜 클래스 정의 내에 동일한 연산자를 정의 할 수 없습니까? 할 방법이 없다면 friend
키워드를 사용하지 않는 것이 있습니까?
똑같은 문제로 고통받는 동일한 질문이 나누기에 해당됩니다.
2는 실제로 "고정 (0.5f) - f3" implict 변환은 멤버 함수로 구현 된 연산자의 lhs에 결코 일어나지 않습니다. 실제로 "this"는 호출자가 제공하는 것이지 일시적인 것이 아닙니다. –
lhs를 해당 연산자가있는 모든 유형으로 변환 할 수 있다면 이름 결정의 완전히 새로운 차원을 갖게되어 표준위원회의 취향에 너무 많은 모호함을 초래할 수 있습니다. –