ホームページ  >  記事  >  バックエンド開発  >  C++ 構文エラー: オーバーロードされた演算子はメンバー関数である必要があります。修正方法は?

C++ 構文エラー: オーバーロードされた演算子はメンバー関数である必要があります。修正方法は?

PHPz
PHPzオリジナル
2023-08-22 08:22:44998ブラウズ

C は、強力なオブジェクト指向プログラミング機能を備えた人気のあるプログラミング言語です。 C でプログラミングする場合、構文エラーが発生することがあります。この記事では、「オーバーロードされた演算子はメンバー関数である必要があります」という一般的なエラーについて説明し、問題を解決するための解決策を提供します。

C では、演算子をオーバーロードして、カスタム クラスのオブジェクトを使用してさまざまな操作を実行できます。たとえば、「 」演算子をオーバーロードして、2 つのカスタム クラス オブジェクト間の加算を実装できます。演算子のオーバーロードは、メンバー関数またはグローバル関数を通じて実装できます。

演算子オーバーロード関数を宣言するときは、それがメンバー関数であるかグローバル関数であるかを指定する必要があります。メンバー関数を使用する場合、演算子オーバーロード関数はクラスのメンバー関数になる必要があります。ただし、演​​算子のオーバーロードに非メンバー関数を使用する場合があり、その場合、「オーバーロードされた演算子はメンバー関数である必要があります。」というエラー メッセージが表示されます。

このエラーを解決するには、演算子をオーバーロードした関数をクラスのメンバー関数に変換します。

2 つのカスタム クラス オブジェクト間の加算演算を実装するために、" " 演算子をオーバーロードするとします。このクラスの名前は「Number」で、2 つのプライベート メンバー変数 num1 と num2 があります。次のコードを使用して、演算子オーバーロード関数を宣言できます。

Number operator+(const Number& num1, const Number& num2) {
  Number sum;
  sum.num1 = num1.num1 + num2.num1;
  sum.num2 = num1.num2 + num2.num2;
  return sum;
}

このコードでは、グローバル関数を使用して " " 演算子をオーバーロードします。これはメンバー関数に変換する必要があるため、間違っています。これを行うには、これを Number クラスのメンバー関数として宣言し、関数名として " " 演算子を使用する必要があります。修正されたコードは次のとおりです。

class Number {
public:
  Number operator+(const Number& num) {
    Number sum;
    sum.num1 = num1 + num.num1;
    sum.num2 = num2 + num.num2;
    return sum;
  }
  
private:
  int num1;
  int num2;
};

この修正されたコードでは、演算子オーバーロード関数を Number クラスのメンバー関数として宣言し、関数名として " " 演算子を使用します。ここで、次のコードを使用して 2 つの Number オブジェクト間の加算を実行できます。

Number num1;
num1.num1 = 1;
num1.num2 = 2;

Number num2;
num2.num1 = 3;
num2.num2 = 4;

Number sum = num1 + num2;

この方法で、" " 演算子を正常にオーバーロードし、2 つの Number オブジェクト間の加算を実行できます。

つまり、C では、オーバーロードされた演算子はメンバー関数を使用して実装する必要があります。現在のコードで非メンバー関数を使用して演算子のオーバーロードを実装している場合、この問題を修正するには、それをメンバー関数に変換し、その関数をクラスのメンバー関数として宣言し、演算子を関数名として使用します。

以上がC++ 構文エラー: オーバーロードされた演算子はメンバー関数である必要があります。修正方法は?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

声明:
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。