C ++の古い構造体演算子のオーバーロード構文が変更されましたか?

オイマン

20年以上前の古いCPPコードをビルドしていますが、g ++でビルドエラーが発生します。誰かが私に何が変わったのか説明できますか?ありがとう。(ターボCでは大丈夫でした)

エラー:

t_overload.cpp:8:40: error: no matching constructor for initialization of 'Point'
    Point operator+(Point& v) { return Point(x+v.x, y+v.y); }
                                       ^~~~~~~~~~~~~~~~~~~

cppファイル:

#include <stdio.h>

struct Point {
    int x, y;
//    Point(Point& v) {set(v.x, v.y);}     // build okay without this line; error if uncomment
    Point(int a, int b) {set(a,b);}
    void set(int a, int b) {x=a, y=b;}
    Point operator+(Point& v) { return Point(x+v.x, y+v.y); }
};

int main() {
    Point a(1,2);
    Point b(a);

    Point c = a + b;
    printf("%d %d\n", c.x, c.y);
}
サム・バルシャフチク
Point(Point& v)

コピーコンストラクターはconstantパラメーターを取る必要があります。これは次のようになります。

Point(const Point& v)

しかし、そのコピーコンストラクターが行うことを考えると、それは完全に不要です。あなたはそれを完全に取り除くことができます。

Point operator+(Point& v) 

同様に、オーバーロードのパラメータは一定である必要があります。

Point operator+(const Point& v) 

「演算子のオーバーロードの基本的なルールとイディオムは何ですか?」を参照してください

これらの問題は両方とも、オーバーロードの微妙で繊細なルールと、一時的なものが関数パラメーターにバインドする方法とともに、コンパイルエラーを引き起こしていました。

この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。

侵害の場合は、連絡してください[email protected]

編集
0

コメントを追加

0

関連記事

分類Dev

マップキーとしてのc ++構造体と演算子のオーバーロード

分類Dev

C構造体をオーバーロードする演算子

分類Dev

演算子のオーバーロードでのC ++構文が不明確

分類Dev

C ++のオーバーロードされた演算子->()が呼び出されていませんか?

分類Dev

構造体/クラスラッパーのC ++オーバーロード自動演算子

分類Dev

C ++での代入演算子のオーバーロード構文の説明

分類Dev

クラスでのC ++演算子のオーバーロードの構文

分類Dev

オーバーロードされた演算子 "<<" c ++の予期しない動作

分類Dev

C ++の初期化されていない構造体メンバー-フィールドが存在しません

分類Dev

構造体内の配列と演算子のオーバーロード、c ++からc#?

分類Dev

c構造体から継承された関数をオーバーライドします

分類Dev

内部と外部のオーバーロードされたC ++演算子の違い

分類Dev

構造体のC ++オーバーロードoperator()

分類Dev

whileループまたは他の何かで演算子がオーバーロードされましたか?C ++初心者はこちら

分類Dev

C ++は、オーバーロードされたコピー代入演算子からデフォルトのコピー代入演算子を呼び出します

分類Dev

オーバーロードされた<<演算子の関数呼び出し(C ++)

分類Dev

C ++クラスのオーバーロードされた演算子が呼び出されない

分類Dev

C-コード行が構造体のアドレスを変更しています

分類Dev

演算子がC ++でオーバーロードされていないかどうかを確認します

分類Dev

オーバーロードされた演算子のパラメーターが多すぎます、Visual Studio C ++

分類Dev

c ++演算子のオーバーロードで他の演算子が表示されない

分類Dev

暗黙的な変換がオーバーロードされた空の構造体メンバーによるC ++クラスの計算されたメンバー

分類Dev

どのように適切にCでのセットでの使用を可能にする構造体で<演算子をオーバーロードする++

分類Dev

関数名/パラメーターの直後で括弧の前に宣言された構造体。誰かがこのC構文を説明できますか?

分類Dev

C ++-構造逆参照演算子をオーバーロードし、unique_ptrで使用します

分類Dev

ベクトルの構造体のメンバーはC ++でゼロで初期化されていますか?

分類Dev

C(またはC ++)では、「&」演算子はアドレス演算子とビット演算子の両方としてどのように機能しますか?演算子のオーバーロードはCではサポートされていないため

分類Dev

C ++で演算子のオーバーロードを使用すると誤った結果が表示されます

分類Dev

マップ内のc ++構造体を値として-エラー「オーバーロードされた関数のインスタンスが引数リストに一致しません」

Related 関連記事

  1. 1

    マップキーとしてのc ++構造体と演算子のオーバーロード

  2. 2

    C構造体をオーバーロードする演算子

  3. 3

    演算子のオーバーロードでのC ++構文が不明確

  4. 4

    C ++のオーバーロードされた演算子->()が呼び出されていませんか?

  5. 5

    構造体/クラスラッパーのC ++オーバーロード自動演算子

  6. 6

    C ++での代入演算子のオーバーロード構文の説明

  7. 7

    クラスでのC ++演算子のオーバーロードの構文

  8. 8

    オーバーロードされた演算子 "<<" c ++の予期しない動作

  9. 9

    C ++の初期化されていない構造体メンバー-フィールドが存在しません

  10. 10

    構造体内の配列と演算子のオーバーロード、c ++からc#?

  11. 11

    c構造体から継承された関数をオーバーライドします

  12. 12

    内部と外部のオーバーロードされたC ++演算子の違い

  13. 13

    構造体のC ++オーバーロードoperator()

  14. 14

    whileループまたは他の何かで演算子がオーバーロードされましたか?C ++初心者はこちら

  15. 15

    C ++は、オーバーロードされたコピー代入演算子からデフォルトのコピー代入演算子を呼び出します

  16. 16

    オーバーロードされた<<演算子の関数呼び出し(C ++)

  17. 17

    C ++クラスのオーバーロードされた演算子が呼び出されない

  18. 18

    C-コード行が構造体のアドレスを変更しています

  19. 19

    演算子がC ++でオーバーロードされていないかどうかを確認します

  20. 20

    オーバーロードされた演算子のパラメーターが多すぎます、Visual Studio C ++

  21. 21

    c ++演算子のオーバーロードで他の演算子が表示されない

  22. 22

    暗黙的な変換がオーバーロードされた空の構造体メンバーによるC ++クラスの計算されたメンバー

  23. 23

    どのように適切にCでのセットでの使用を可能にする構造体で<演算子をオーバーロードする++

  24. 24

    関数名/パラメーターの直後で括弧の前に宣言された構造体。誰かがこのC構文を説明できますか?

  25. 25

    C ++-構造逆参照演算子をオーバーロードし、unique_ptrで使用します

  26. 26

    ベクトルの構造体のメンバーはC ++でゼロで初期化されていますか?

  27. 27

    C(またはC ++)では、「&」演算子はアドレス演算子とビット演算子の両方としてどのように機能しますか?演算子のオーバーロードはCではサポートされていないため

  28. 28

    C ++で演算子のオーバーロードを使用すると誤った結果が表示されます

  29. 29

    マップ内のc ++構造体を値として-エラー「オーバーロードされた関数のインスタンスが引数リストに一致しません」

ホットタグ

アーカイブ