プロが教える店舗&オフィスのセキュリティ対策術

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

struct ST {
int a;
int b[10];
};

ST a;
ST b;

a = b; // エラーなし
if (a != b) {      // エラーあり
printf("違います");
}

A 回答 (3件)

一例まで。



#include <stdio.h>
#include <memory.h>

struct ST {
public:
int a;
int b[10];
public:
bool operator == (struct ST obj)
{
if (this->a == obj.a) {
if (memcmp(this->b, obj.b, sizeof(this->b)) == 0) {
return(true);
}
}
return(false);
}

bool operator != (struct ST obj)
{
if (this->a == obj.a) {
if (memcmp(this->b, obj.b, sizeof(this->b)) == 0) {
return(false);
}
}
return(true);
}
};

void main()
{
struct STsa, sb;
inti;

sa.a = 1;
for (i = 0; i < 10; i++) {
sa.b[i] = i;
}
sb.a = 1;
for (i = 0; i < 10; i++) {
sb.b[i] = i;
}
if (sa == sb) {
printf("\nsa == sb\n");
}
if (sa != sb) {
printf("\nsa != sb\n");
}

}
    • good
    • 0

演算子のオーバロードを定義してつかう方法もあります


説明すると長くなるので
C++の本をごらんになられるとよいでしょう
柴田望洋さんの本に具体的なやりかたが載っています
クラスでしかやったことないので
構造体をクラスとして定義しなおす必要があるかどうかは
わかりません
    • good
    • 0

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

    • good
    • 0

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!