错误:无效æ“作数到二进制==(有'struct demo'å’Œ'struct demo')

时间:2014-02-11 16:45:27

标签: c arrays struct compiler-errors equality

代ç 1:

struct demo
{
    int a;
}d[2];

int main()
{
    d[0].a=5;
    d[1]=d[0];
    return 0;
}

此代ç å¯ä»¥æ­£å¸¸ä½¿ç”¨

代ç 2:

struct demo
{
    int a;
}d[2];

int main()
{ 
    d[0].a=5;
    d[1]=d[0];
    if(d[0]==d[1])
    {
        printf("hello");
    }
return 0;
}

此代ç æ供错误

error: invalid operands to binary == (have 'struct demo' and 'struct demo')

为什么在代ç 2中出现此错误?

2 个答案:

答案 0 :(得分:6)

Cä¸æ”¯æŒç»“构比较。您必须通过é€ä¸ªæ¯”较所有æˆå‘˜æ¥è‡ªè¡Œæ¯”较结构。

How do you compare structs for equality in C?

答案 1 :(得分:3)

您需è¦è‡ªå·±æ¯”较结构的æˆå‘˜ï¼Œå¦‚下所示:

if(d[0].a ==d[1].a)

结构ä¸æ˜¯ç›¸ç­‰çš„有效æ“作数(==),æ“作数必须是算术类型或指针。我们å¯ä»¥åœ¨draft C99 standard部分6.5.9 平等è¿è¥å•†ä¸­çœ‹åˆ°è¿™ä¸€ç‚¹ï¼š

  

以下其中一项应æˆç«‹ï¼š

  • 两个æ“作数都有算术类型
  • 两个æ“作数都指å‘兼容类型的é™å®šæˆ–éžé™å®šç‰ˆæœ¬çš„指针;
  • 一个æ“作数是指å‘对象或ä¸å®Œæ•´ç±»åž‹çš„指针,å¦ä¸€ä¸ªæ˜¯æŒ‡å‘a的指针 无效的åˆæ ¼æˆ–ä¸åˆæ ¼çš„版本;或
  • 一个æ“作数是指针,å¦ä¸€ä¸ªæ˜¯ç©ºæŒ‡é’ˆå¸¸é‡ã€‚