提问人:Jason 提问时间:10/25/2023 更新时间:10/25/2023 访问量:117
为什么会出现此错误?二进制表达式 [duplicate] 的操作数无效
Why do I get this error? invalid operands to binary expression [duplicate]
问:
我想检查 2 个结构指针是否指向相同的值,但出现此错误:
./07ex.c:158:15:错误:二进制表达式(“RGB”(又名“结构RGB_”)和“RGB”的操作数无效 返回 *x == *y; 下面是结构和函数:
typedef struct RGB_ {
float r;
float g;
float b;
} RGB;
bool point_to_equal_values_struct(RGB *x, RGB *y) {
return *x == *y;
}
我通过这样做来度过难关:
bool point_to_equal_values_struct(RGB *x, RGB *y) {
if ((*x).r == (*y).r && (*x).g == (*y).g && (*x).b == (*y).b)
{
return true;
}
return false;
}
但是,我仍然很好奇为什么编译器会给出这个错误。 提前致谢!
答:
4赞
dbush
10/25/2023
#1
运算符未定义为处理结构,因此无法直接比较两个结构。==
您需要像以前一样比较相应的字段。在侧节点上,您可能希望使用运算符来访问指针引用的结构的成员,因为它更易于阅读:->
if (x->r == y->r && x->g == y->g && x->b == y->b)
0赞
2 revs0___________
#2
除了@dbush答案之外,您还可以在结构被打包的情况下:
if(!memcmp(x,y, sizeof(*x)))
{
/* do something */
}
成员访问包装结构可能非常昂贵,并且效率更高。memcpy
评论
0赞
dbush
10/25/2023
由于填充,这不能保证有效。
0赞
Aconcagua
10/25/2023
一般不行!!在这种特定情况下,是的,因为所有成员都具有相同的大小,并且不会添加填充字节(通常,至少,但这又不能保证!但是,如果大小不同,则可能会发生这种情况,并且这些填充字节的内容不确定,但它们包含在比较中!
0赞
0___________
10/25/2023
@dbush电话分散了我的注意力。我的意思是打包的结构,单个成员访问可能很昂贵。
评论
operator==
RGB
is_rgb_equal
RGB