2011-06-13 7 views
2

왜이 코드는 오류 메시지 "이 연산자 함수에 너무 많은 매개 변수 인텔리"를 제공 않습니다. 이 메서드는 클래스에 있습니다.연산자 + 과부하 문제

+3

이것은 클래스 메서드가 아닙니까? PerfectNum의 메소드로 만들면 하나의 매개 변수 만 필요하고 "this.thenum"을 다른 매개 변수로 사용하십시오. – sleeves

+1

컴파일러에서 얻은 정확한 오류 메시지입니까? 함수'int operator + (PerfectNum, PerfectNum)'가 너무 많은 매개 변수를 반환합니까? – Oswald

+0

컴파일러가 이러한 오류 메시지를 생성하지 않습니다. 여기에 컴파일러 출력을 게시 할 때 복사하여 붙여 넣기를 사용하십시오. –

답변

6

이것을 멤버 함수로 정의하는 것이 맞습니까? 이 경우

은, 왼쪽은 단순히 *this입니다 :

// .h 
class PerfectNum 
{ 
    public: 
    int operator+(PerfectNum other) const; 
}; 

// .cpp 
int PerfectNum::operator+(const PerfectNum &other) const 
{ 
    return this->thenum + other.thenum; 
} 
+3

종류를 잘못 편집했습니다. 운영자는 무료 기능, 아마도 친구 여야합니다. 구성원 인 경우 const이어야합니다. 그리고 매개 변수는 반드시 const 참조가되어야합니다. 구문이 잘못되었습니다. 구현에 반환 형식이 없습니다. 이 물건을 누가 투표 할 것입니까? –

+0

네 말이 맞아,이 모든 게 끔찍해. 어제 꽤 스트레스를 많이받는 일이 있었고 그 일에서 벗어날 필요가있었습니다. 그러나 분명히 내 지식의 일부를 남겨 두었습니다 :-) –

+0

또한 멤버가 될 수는 없습니다. 나는 약간의 지식을 놓칠지도 모른다. 그렇다면 모든 것을 비판하기보다 * 나를 도우십시오 *. 나는 그것이 (OP의 에러 메시지에 따라) 왜 너무 많은 파라미터가 있는지 설명 할 것이기 때문에 그것이 멤버 함수 여야한다고 생각했다. –

4

당신은 운영자가 아닌 멤버 함수를 확인해야합니다.

+0

+1 Sheesh. 부정확 한 대답에 대한 모든 위 표결과 정답에 대한 오직 하나의 표결로, 나는 여기에서 과당 투표를해야한다고 느꼈습니다. 그리고 이것에 올바르게 대답 한 다른 모든 사람들. –

+0

왜 멤버 함수가 아니어야하는지에 대한 좋은 설명이 있습니까? 왼쪽에 'PerfectNum'으로 제한하려고 할 때 괜찮다고 가르쳤습니다. OP는 단지 두 개의 PerfectNum 객체 사이에 있기를 원하기 때문에 멤버 함수가 갈 길이라고 생각했습니다. –

1

운영자 +는 비회원 기능이어야합니다. 반환 유형은 const 객체 여야합니다. operator = defined가있는 경우 연산자 + =도 정의하는 것이 항상 좋습니다. 따라서 operator + = 연산자로 operator +를 구현할 수 있습니다.

const PerfectNum operator+(const PerfectNum& lhs, const PerfectNum& rhs) 
{ 
    PerfectNum ret(lhs); 
    ret += rhs; 
    return rhs; 
} 
1

오버로드 연산자는 클래스 메소드로 선언 할 때 확실히 friend/free 함수가 아니어야합니다. 다음은 매우 간단한 구현입니다.

class PerfectNum { 
    public: 
     PerfectNum(int); 
     PerfectNum(const PerfectNum&); 
     PerfectNum operator+(const PerfectNum&) const; 
    private: 
     int mNumber; 
}; 

PerfectNum PerfectNum::operator+(const PerfectNum& rhs) const 
{ 
    return PerfectNum(this->mNumber + rhs.mNumber); 
}