>  기사  >  백엔드 개발  >  C++ 컴파일 오류: 오버로드된 연산자에는 클래스 유형 매개변수가 하나 이상 있어야 합니다. 어떻게 수정해야 합니까?

C++ 컴파일 오류: 오버로드된 연산자에는 클래스 유형 매개변수가 하나 이상 있어야 합니다. 어떻게 수정해야 합니까?

WBOY
WBOY원래의
2023-08-22 16:24:30862검색

C++ 컴파일 오류: 오버로드된 연산자에는 클래스 유형 매개변수가 하나 이상 있어야 합니다. 어떻게 수정해야 합니까?

C++ 컴파일 오류: 오버로드된 연산자에는 클래스 유형 매개변수가 하나 이상 있어야 합니다. 어떻게 수정해야 하나요?

C++에서는 연산자를 오버로드하여 연산자의 동작을 사용자 정의할 수 있습니다. 그러나 연산자를 오버로딩할 때는 매개변수 유형에 주의해야 합니다. 가장 일반적인 컴파일 오류 중 하나는 "오버로드된 연산자에는 클래스 유형 매개변수가 하나 이상 있어야 합니다"입니다. 이 문서에서는 이 오류의 원인과 해결 방법을 설명합니다.

  1. 이 오류는 왜 발생하나요?

오버로드된 연산자는 "연산자"라는 키워드를 사용하여 정의된 함수이며 일반 함수처럼 매개변수를 받을 수 있습니다. C++에서는 오버로드된 연산자에 클래스 유형 매개변수가 하나 이상 있어야 한다고 규정합니다. 이는 연산자가 클래스 객체를 조작하는 데 사용되며 이 작업을 완료하려면 클래스 유형 매개변수가 하나 이상 필요하기 때문입니다.

예를 들어 "myClass"라는 클래스를 정의하고 "+" 연산자를 추가하는 경우 추가 작업을 수행하려면 "myClass" 유형의 매개변수를 하나 이상 전달해야 합니다. 클래스 유형 매개변수 없이 연산자를 정의하면 컴파일러는 해당 연산자를 인식하지 못합니다.

  1. 이 오류를 해결하는 방법은 무엇입니까?

방법 1: 클래스 유형 매개변수 추가

가장 일반적인 해결 방법은 다음과 같이 연산자에 클래스 유형 매개변수를 추가하는 것입니다.

class myClass{
  public:
    int val;
    myClass operator+(const myClass& other){
        myClass result;
        result.val = this->val + other.val;
        return result;
  }
};

위 코드에서는 "+"에 대한 클래스 유형 매개변수를 추가했습니다. 연산자 두 개의 myClass 객체를 추가할 수 있는 "other"라는 myClass 유형 매개 변수입니다.

방법 2: 전역 함수 사용

오버로드된 연산자는 전역 함수를 사용하여 정의할 수도 있습니다. 전역 함수를 사용하여 연산자를 오버로드하는 경우 클래스 유형 매개변수가 필요하지 않고 대신 일반 유형 매개변수를 사용하여 작업을 수행합니다.

예를 들어 다음과 같은 방법으로 "+" 연산자를 정의할 수 있습니다.

class myClass{
  public:
    int val;
};

myClass operator+(const myClass& obj1, const myClass& obj2){
    myClass result;
    result.val = obj1.val + obj2.val;
    return result;
}

위 코드에서는 전역 함수를 정의하여 "+" 연산자를 오버로드했습니다. 이 함수에서는 myClass 객체에 대한 두 개의 상수 참조를 매개 변수로 받아들이고 작업 결과로 myClass 객체를 반환합니다.

방법 3: 친구 기능 사용

이 오류를 해결하는 또 다른 방법은 친구 기능을 사용하는 것입니다. C++에서는 함수가 클래스의 전용 멤버에 액세스할 수 있도록 "friend" 키워드를 사용하여 클래스에 비멤버 함수를 선언할 수 있습니다.

그런 다음 다음과 같은 방법으로 "+" 연산자를 오버로드할 수 있습니다.

class myClass{
  friend myClass operator+(myClass obj1, myClass obj2){
    myClass result;
    result.val = obj1.val + obj2.val;
    return result;
  }
  public:
    int val;
};

위 코드에서는 friend 함수를 사용하여 "+" 연산자를 오버로드했습니다. myClass 클래스에서 해당 함수를 friend 함수로 선언하면 클래스의 전용 멤버에 직접 액세스할 수 있습니다. 이 시점에서 두 개의 myClass 개체를 함수에 매개 변수로 전달하고 작업 결과로 myClass 개체를 반환합니다.

요약:

오버로드된 연산자는 연산자의 동작을 사용자 정의하는 데 도움이 되는 C++의 강력한 기능입니다. 그러나 연산자를 오버로드하는 경우 컴파일 오류를 방지하려면 매개변수 유형에 주의해야 합니다. "오버로드된 연산자에는 하나 이상의 클래스 유형 매개변수가 있어야 합니다." 오류가 발생하는 경우 위 방법 중 하나를 사용하여 문제를 해결할 수 있습니다.

위 내용은 C++ 컴파일 오류: 오버로드된 연산자에는 클래스 유형 매개변수가 하나 이상 있어야 합니다. 어떻게 수정해야 합니까?의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 admin@php.cn으로 문의하세요.