C コンパイル エラー: オーバーロードされた演算子には、少なくとも 1 つのクラス型パラメーターが必要です。どのように変更すればよいですか?
C では、演算子をオーバーロードすることで演算子の動作をカスタマイズできます。ただし、演算子をオーバーロードする場合は、パラメーターの型に注意する必要があります。最も一般的なコンパイル エラーの 1 つは、「オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要です」です。この記事では、このエラーの原因と修正方法について説明します。
オーバーロードされた演算子は、キーワード「演算子」を使用して定義された関数で、通常の関数と同様にパラメーターを受け入れることができます。 C では、オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要であると規定されています。これは、演算子がクラス オブジェクトの操作に使用され、この操作を完了するには少なくとも 1 つのクラス型パラメーターが必要であるためです。
たとえば、「myClass」というクラスを定義し、それに「 " 演算子を追加する場合、追加操作を実行するには、タイプ「myClass」のパラメーターを少なくとも 1 つ渡す必要があります。クラス型パラメータを指定せずに演算子を定義すると、コンパイラは演算子を認識できません。
方法 1: クラス型パラメーターを追加する
最も一般的な解決策は、次のように演算子にクラス型パラメーターを追加することです:
class myClass{ public: int val; myClass operator+(const myClass& other){ myClass result; result.val = this->val + other.val; return result; } };
In In上記のコードでは、「other」という名前の myClass 型パラメータを「」演算子に追加しました。これにより、2 つの 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 オブジェクトの 2 つの定数参照をパラメーターとして受け入れ、操作の結果として myClass オブジェクトを返します。
方法 3: フレンド関数を使用する
このエラーを修正するもう 1 つの方法は、フレンド関数を使用することです。 C では、「friend」キーワードを使用してクラス内で非メンバー関数を宣言し、その関数がクラスのプライベート メンバーにアクセスできるようにすることができます。
次に、次の方法で " " 演算子をオーバーロードできます。
class myClass{ friend myClass operator+(myClass obj1, myClass obj2){ myClass result; result.val = obj1.val + obj2.val; return result; } public: int val; };
上記のコードでは、フレンド関数を使用して " " 演算子をオーバーロードします。この関数を myClass クラスでフレンド関数として宣言すると、クラスのプライベート メンバーに直接アクセスできます。この時点で、2 つの myClass オブジェクトをパラメータとして関数に渡し、操作の結果として myClass オブジェクトを返します。
概要:
オーバーロードされた演算子は、演算子の動作をカスタマイズするのに役立つ C の強力な機能です。ただし、演算子をオーバーロードする場合は、コンパイル エラーを避けるためにパラメータの型に注意する必要があります。 「オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要です」というエラーが発生した場合は、上記のいずれかの方法を使用して問題を修正できます。
以上がC++ コンパイル エラー: オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要です。どのように変更すればよいですか?の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。