왜이 코드는 오류 메시지 "이 연산자 함수에 너무 많은 매개 변수 인텔리"를 제공 않습니다. 이 메서드는 클래스에 있습니다.연산자 + 과부하 문제
답변
이것을 멤버 함수로 정의하는 것이 맞습니까? 이 경우
은, 왼쪽은 단순히 *this
입니다 :
// .h
class PerfectNum
{
public:
int operator+(PerfectNum other) const;
};
// .cpp
int PerfectNum::operator+(const PerfectNum &other) const
{
return this->thenum + other.thenum;
}
종류를 잘못 편집했습니다. 운영자는 무료 기능, 아마도 친구 여야합니다. 구성원 인 경우 const이어야합니다. 그리고 매개 변수는 반드시 const 참조가되어야합니다. 구문이 잘못되었습니다. 구현에 반환 형식이 없습니다. 이 물건을 누가 투표 할 것입니까? –
네 말이 맞아,이 모든 게 끔찍해. 어제 꽤 스트레스를 많이받는 일이 있었고 그 일에서 벗어날 필요가있었습니다. 그러나 분명히 내 지식의 일부를 남겨 두었습니다 :-) –
또한 멤버가 될 수는 없습니다. 나는 약간의 지식을 놓칠지도 모른다. 그렇다면 모든 것을 비판하기보다 * 나를 도우십시오 *. 나는 그것이 (OP의 에러 메시지에 따라) 왜 너무 많은 파라미터가 있는지 설명 할 것이기 때문에 그것이 멤버 함수 여야한다고 생각했다. –
당신은 운영자가 아닌 멤버 함수를 확인해야합니다.
+1 Sheesh. 부정확 한 대답에 대한 모든 위 표결과 정답에 대한 오직 하나의 표결로, 나는 여기에서 과당 투표를해야한다고 느꼈습니다. 그리고 이것에 올바르게 대답 한 다른 모든 사람들. –
왜 멤버 함수가 아니어야하는지에 대한 좋은 설명이 있습니까? 왼쪽에 'PerfectNum'으로 제한하려고 할 때 괜찮다고 가르쳤습니다. OP는 단지 두 개의 PerfectNum 객체 사이에 있기를 원하기 때문에 멤버 함수가 갈 길이라고 생각했습니다. –
운영자 +는 비회원 기능이어야합니다. 반환 유형은 const 객체 여야합니다. operator = defined가있는 경우 연산자 + =도 정의하는 것이 항상 좋습니다. 따라서 operator + = 연산자로 operator +를 구현할 수 있습니다.
const PerfectNum operator+(const PerfectNum& lhs, const PerfectNum& rhs)
{
PerfectNum ret(lhs);
ret += rhs;
return rhs;
}
오버로드 연산자는 클래스 메소드로 선언 할 때 확실히 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);
}
- 1. 과부하 연산자 =
- 2. 연산자 << 과부하
- 3. 과부하 참조 연산자
- 4. 과부하 연산자 = 비회원으로
- 5. 다항식 과부하 연산자
- 6. 과부하 연산자 = in C#
- 7. 과부하 +/- 단항 연산자
- 8. C++ 과부하 연산자 ==
- 9. 과부하 연산자 = 내부 템플릿 클래스
- 10. 오류 : 대한 모호한 과부하 '연산자 /'
- 11. 과부하 []
- 12. C++ - 알파벳순 문자열 - '<'연산자 과부하
- 13. C++의 열거 형에서 과부하 출력 연산자
- 14. C# 과부하 문제
- 15. 재귀 문제 과부하 운영자
- 16. C++ 전처리 및 과부하 문제
- 17. 과부하! 운영자 루비
- 18. 과부하
- 19. 과부하
- 20. 흥미로운 C++ 연산자 오버로딩 문제
- 21. C++ 변환 연산자 오버로드 문제
- 22. ASP.net MVC 사용자 지정 문자열 출력 과부하 연산자 <% = h
- 23. 왜 연산자 -> 수동으로 과부하 될 수 있습니까?
- 24. sizeof 연산자 문제
- 25. 스트림 연산자 오버로드 문제
- 26. 조건부 연산자 문제
- 27. C# 및 연산자 문제
- 28. SQLite보다 작음 연산자 문제
- 29. 생성자 과부하 문제 C++에서 상속 여기
- 30. 메서드 문제에 대한 과부하 문제 해결
이것은 클래스 메서드가 아닙니까? PerfectNum의 메소드로 만들면 하나의 매개 변수 만 필요하고 "this.thenum"을 다른 매개 변수로 사용하십시오. – sleeves
컴파일러에서 얻은 정확한 오류 메시지입니까? 함수'int operator + (PerfectNum, PerfectNum)'가 너무 많은 매개 변수를 반환합니까? – Oswald
컴파일러가 이러한 오류 메시지를 생성하지 않습니다. 여기에 컴파일러 출력을 게시 할 때 복사하여 붙여 넣기를 사용하십시오. –