【问题标题】:What does 'invalid operands to binary == (have 'quantity' and 'int')' mean?'二进制==的无效操作数(具有'数量'和'int')'是什么意思?
【发布时间】:2013-08-27 23:09:54
【问题描述】:

我正在学习 c,这是“Head First C”一书中的一个练习,我的代码看起来与示例相同,但出现上述错误。

#include <stdio.h>

typedef enum {
    COUNT,POUNDS,PINTS
}unit_of_measure;

typedef union {
    short count;
    float weight;
    float volume;
}quantity;

typedef struct{
    const char *name;
    const char *country;
    quantity amount;
    unit_of_measure units;
}fruit_order;

void display(fruit_order order)
{
    printf("The order contains ");

    if(order.amount==PINTS) //ERROR HERE
        printf("%2.2f pints of %s\n",order.amount.weight, order.name);

    else if(order.amount==POUNDS){  //ERROR HERE
            printf("%2.2f lbss of %s\n",order.amount.weight, order.name);

    else
            printf("%i %s\n",order.amount.weight, order.name);

}

int main()
{
    fruit_order apples = {"apples","Canada", .amount.count=100, COUNT};

    fruit_order strawberries = {"strawberries","England", .amount.count=100, PINTS};
    fruit_order oj = {"juice","USA", .amount.count=100, PINTS};

    display(apples);
    display(strawberries);
    display(oj);
    return 0;
}

这个错误是什么意思?

【问题讨论】:

    标签: c int operand


    【解决方案1】:

    你的意思是:

    if (order.units == PINTS)
    

    否则,您会尝试将枚举值与 union 类型进行比较。

    【讨论】:

      【解决方案2】:
      void display(fruit_order order)
      {
          printf("The order contains ");
      
          if(order.units==PINTS) {
              printf("%2.2f pints of %s\n",order.amount.weight, order.name);
          }
          else if(order.units==POUNDS){  
                  printf("%2.2f lbss of %s\n",order.amount.weight, order.name);
          }
          else {
                  printf("%i %s\n",order.amount.weight, order.name);
          }
      }
      

      unitsunit_of_measure,我们应该使用order.units==PINTS;我建议我们总是在if 语句中使用{} 以使代码更清晰。我刚刚注意到原始代码缺少括号。

      【讨论】:

        【解决方案3】:

        这就是它所说的意思。

        order.amount 是一个量,它是一个并集。您正在将其与枚举进行比较,枚举是下面的 int。你不能那样做。

        看代码我想你想要的是把左边的比较改成order.units

        if(order.units==PINTS) 
        

        【讨论】:

          猜你喜欢
          • 2021-06-02
          • 2014-11-29
          • 1970-01-01
          • 2021-04-16
          • 2012-01-17
          • 2022-01-11
          • 1970-01-01
          • 2021-03-11
          • 1970-01-01
          相关资源
          最近更新 更多