C++ コンパイル エラー: オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要です。どのように変更すればよいですか?

WBOY
リリース: 2023-08-22 16:24:30
オリジナル
843 人が閲覧しました

C++ コンパイル エラー: オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要です。どのように変更すればよいですか?

C コンパイル エラー: オーバーロードされた演算子には、少なくとも 1 つのクラス型パラメーターが必要です。どのように変更すればよいですか?

C では、演算子をオーバーロードすることで演算子の動作をカスタマイズできます。ただし、演​​算子をオーバーロードする場合は、パラメーターの型に注意する必要があります。最も一般的なコンパイル エラーの 1 つは、「オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要です」です。この記事では、このエラーの原因と修正方法について説明します。

  1. なぜこのエラーが発生するのでしょうか?

オーバーロードされた演算子は、キーワード「演算子」を使用して定義された関数で、通常の関数と同様にパラメーターを受け入れることができます。 C では、オーバーロードされた演算子には少なくとも 1 つのクラス型パラメーターが必要であると規定されています。これは、演算子がクラス オブジェクトの操作に使用され、この操作を完了するには少なくとも 1 つのクラス型パラメーターが必要であるためです。

たとえば、「myClass」というクラスを定義し、それに「 " 演算子を追加する場合、追加操作を実行するには、タイプ「myClass」のパラメーターを少なくとも 1 つ渡す必要があります。クラス型パラメータを指定せずに演算子を定義すると、コンパイラは演算子を認識できません。

  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 サイトの他の関連記事を参照してください。

ソース:php.cn
このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。
最新の問題
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート
私たちについて 免責事項 Sitemap
PHP中国語ウェブサイト:福祉オンライン PHP トレーニング,PHP 学習者の迅速な成長を支援します!