• 締切済み

C++で構造体のコピーはできても == や != で比較はできないので

Yanchの回答

  • Yanch
  • ベストアンサー率50% (114/225)
回答No.1

C++ なら、operator をオーバーライドすれば、出来るはずですよ。

関連するQ&A

  • 構造体の代入と比較

    構造体のコピーは以下のようで正しいと思いますが、 struct A { int a; }; struct x, y; x.a=1; y = x; 構造体の比較は if (x != y)ではいけないのでしょうか? 構造体に限らずクラスも同じ考えでしょうか?

  • 分割コンパイル時に構造体....

    レベルの低い質問とは思いますが struct st { int a; int b; }; void a(struct st *ST) { ST->a=1; ST->b=1; } void main() { struct st ST; a(&ST); printf("%d%d",ST.a,ST.b); getch(); } これだと問題なく動作するのですが、ソースファイルを分割して ソース1 void a(struct st *ST); struct st { int a; int b; }; void main() { struct st ST; a(&ST); printf("%d%d",ST.a,ST.b); getch(); } ソース2 void a(struct st *ST) { ST->a=1; ST->b=1; } だとエラーが返ってくるのがなぜなのか解りません ソース2でも同じ構造体の宣言をしなければならないのでしょうか。 長くなり読みにくくなってしまいましたが、よろしくお願いします。

  • C++言語で、構造体のコピーは可能(しても良い)のでしょうか?

    C++言語で、構造体のコピーは可能(しても良い)のでしょうか? 問題がある場合は、なぜだめなのか知りたいです。 構造体は可変長ではありません。 typedef struct kumi { char namae[10]; int ten; }Kumi; Kumi a, b; strcpy(a.namae, "AAA"); a.ten = 50; b = a;

  • C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成して

    C言語にて構造体のメンバがNULLであるかを判定するサンプルを作成しています。 一応目的の動作はするのですが、プログラミングとして正しいか教えて頂ければと 思います。 <test.c> int main() { /* ---------------------------------------- */ /* 構造体のメンバ(NULL保障無し)がNULLか */ /* 比較するサンプル */ /* ---------------------------------------- */ char buf[50]; /* サンプル構造体 */ struct ST_test { int cd; char name[10]; int no; }; struct ST_test st_test; /* 構造体定義 */ memset(&st_test,0x00,sizeof(st_test)); /* 構造体初期化 */ memset(&buf[0],0x00,sizeof(buf)); /* 構造体初期化 */ /* 構造体に値セット */ st_test.cd = 12; memcpy(&st_test.name[0],"aabbccddee",sizeof(st_test.name)); st_test.no = 999; /* NULL判定 */ if(*st_test.name == 0x00) { printf("NULLです\n"); } else { printf("NULLではないです\n"); } return (0); }

  • C言語 構造体に関するプログラムのエラーについて

    次は自分で書いたプログラムの一部なのですが、このプログラムをコンパイルすると以下のようなエラーが表示されます。 struct monster{ int type; /* タイプ */ char trick[25]; /* 技 */ char trick2[25]; /* 技2 */ int tricktype; /* 技1のタイプ */ int tricktype2; /* 技2のタイプ */ int trickeffect; /* 技1の威力 */ int trickeffect2; /* 技2の威力 */ char name[10]; /* 名前 */ int power; /* 攻撃力 */ int diffence; /* 防御力 */ int speed; /* 素早さ */ int HP; /* 体力 */ /* 1,fire 2,water 3,nature 4,thunder 5,wind */ }; struct monster monster2[5] = { { 1, "a", "b", 1, 2, 120, 80, "v", 60, 60, 60, 100}, { 2, "a", "b", 2, 3, 120, 80, "w", 60, 60, 60, 100}, { 3, "a", "b", 3, 4, 120, 80, "x", 60, 60, 60, 100}, { 4, "a", "b", 4, 5, 120, 80, "y", 60, 60, 60, 100}, { 5, "a", "b", 5, 1, 120, 80, "z", 60, 60, 60, 100}, } void battle(int a[2][3], struct monster monster[], struct monster monster2[]) { ・ ・ ・ printf("player2は%sをくりだした。\n", monster2.name[a[1][0] - 1]); ・ ・ printf("%sの残り体力は%d。\n", monster2.name[a[1][0] - 1], monster2.HP[a[1][0] - 1]); } monsterbattle.c:467:61: エラー: 構造体または共用体ではない何かのメンバ ‘name’ の 要求です printf("player2は%sをくりだした。\n", monster2.name[a[1][0] - 1]); ^ monsterbattle.c:475:52: エラー: 構造体または共用体ではない何かのメンバ ‘name’ の 要求です printf("%sの残り体力は%d。\n", monster2.name[a[1][0] - 1], monster2.HP[a[1 ][0] - 1]); ^ monsterbattle.c:475:80: エラー: 構造体または共用体ではない何かのメンバ ‘HP’ の要 求です printf("%sの残り体力は%d。\n", monster2.name[a[1][0] - 1], monster2.HP[a[1 ][0] - 1]); このようなエラーがあちこちで表示されるのですが、どのようにプログラミングを改善すべきなのでしょうか? お手数ですが、よろしくお願いします。

  • C言語の構造体について

    構造体を勉強している所なのですが変数をまとめられるのは分かりましたがどのサイトを見てもいまいち使い所がわかりません。 struct test { int a; int b; int c; }testtest; testtest.a = 0; testtest.b = 1; testtest.c = 2; 例えば上記のような構造体を作成するとします。 私の見たサイトでは構造体で宣言はまとめられても初期化する事はできないと書いてありました。 下記のように変数を普通に宣言&初期化するよりも手間がかかってしまっていると思うのですが私の考えが及ばない何か別の使い方または処理が早くなったりする事があるのでしょうか?。 int a = 0; int b = 1; int c = 2;

  • C#で構造体の配列を持った構造体を使いたいのですが

    C#で構造体の配列を持った構造体を使いたいのですが Cならば struct xyz { struct abc _abc[32]; int index; }; struct abc { int a; int b; int c; }; struct xyz _xyz[8]; xyz[0]._abc[3].b = 1; のような使い方で という感じで やっていた事を C#で 同じような事をやろうとしても うまくいきません うまくやる方法をどなたかご存知ないでしょうか Visual Studio 2005行った場合 コンパイルで 構文エラーです。不適切な配列の宣言子です。マネージ配列を宣言するには、次元指定子を変数の識別子の前に指定します。固定サイズ バッファ フィールドを宣言するには、フィールド型の前に fixed キーワードを使用します となり fixed をつけると 固定サイズ バッファの型は次のうちの 1 つでなければなりません: bool、byte、short、int、long、char、sbyte、ushort、uint、ulong、float または double となってしまいます

  • 入れ子の構造体について

    例えば、入れ子の構造体を1つ使いたい場合、 struct bbb{ int b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; と書くと、「dt.a.b = 10」とやれば、値等を設定できると思いますが、 入れ子の構造体を2つ使いたい場合も、同じように書けるのでしょうか? struct ccc{ int c; }; struct bbb{ struct ccc b; }; typedef struct aaa{ struct bbb a; }AAA; AAA dt; dt.a.b.c = 10; と書けるのでしょうか?こんがらがってしまって、どう書いていいのか・・。 2つでも出来るのであれば、コードの書き方を教えて頂けませんか?

  • 構造体の初期設定 (C++)

    構造体の初期設定 (C++) C++言語にて以下のコードをコンパイルすると9行目でERROR(E2188 構文エラー)がでます。 【質問】  9行目をどう直せばいいのでしょうか。 -------------------------------------- struct strData{ int a; int *b; }; void main(void) { struct strData *strc; *strc = {5,(int*)6}; /* 9行目 */ } -------------------------------------- 参考書やネットで調べたのですが解説が見つかりませんでしたので。。

  • 構造体の使い方

    構造体の基本的な使い方を練習しようと思ったのですが、 なかなかスムーズにいきません。 p.d=10; の部分がおかしいようなのですが、色々試してもコンパイルできませんでした。 正しい使い方を教えていただけないでしょうか ソース ↓ #include<stdio.h> struct type{ int a; float b;  double c; }var,*p; main(){ c=9.87;      p=&var; p.d=10; p->b=1.2; printf("int:%d\n",*p); printf("float:%.1f\n",&p); printf("double:%.3lf\n",c); return 0; }