结构错误表达式必须为bool类型

struct error expression must have bool type

本文关键字:bool 类型 错误 表达式 结构      更新时间:2023-10-16

今天我正在学习如何声明结构记录类型,在数组中应用结构化记录类型。基本上这就是我开始使用struct编码的方式。

struct myStock 
    {
        string title;
        double price;
        int stock_lvl;
        bool award;
    };
myStock stock[4]; //store 4 record
void initialize()
{
stock[1].title = "Ilo Ilo";
stock[1].price =  35.55;
stock[1].stock_lvl = 15;
stock[1].award = 1;
stock[2].title = "Money Just Enough";
stock[2].price =  10.35;
stock[2].stock_lvl = 0;
stock[2].award = 0;
stock[3].title = "My Mother-in-Law";
stock[3].price =  22.50;
stock[3].stock_lvl = 5;
stock[3].award = 0;
stock[4].title = "Stars";
stock[4].price =  22.95;
stock[4].stock_lvl = 1;
stock[4].award = 1;
}

一切都很好,但是当我来到这部分时,这部分是数组将循环并检查stock_lvl的值并基于条件并执行的地方。但是我收到的错误是"结构错误表达式必须具有bool类型"。我做错什么了吗?我不想要答案,但也许有人能给我解释一下?

int replenishStock()
{       
    for(int i=0; i<4; i++)
    {
    if(myStock[i].stock_lvl < 2)
    {
         myStock[i].award = true;             
         myStock[i].stock_lvl = +10;
    }
    else 
        myStock[i].stock_lvl = +5;
    }

对于初学者来说,N个元素的数组的有效索引范围是[0,n -1]。所以这些语句

stock[4].title = "Stars";
stock[4].price =  22.95;
stock[4].stock_lvl = 1;
stock[4].award = 1;

对于包含4个元素的数组无效。

对于错误信息,似乎不是像这样的语句中的结构名称

if(myStock[i].stock_lvl < 2)
   ^^^^^^^

必须使用数组名

if(stock[i].stock_lvl < 2)
   ^^^^^^^

你做错了两件事:

  1. 您将数组定义为myStock stock[4];,这意味着您需要执行stock[0]stock[3]而不是stock[1]stock[4]

  2. 另外,如果你定义你的结构体有bool award;,那么你应该使用stock[x].award = true;stock[x].award = false;而不是stock[x].award = 0;stock[x].award = 1;一个bool类型想要真或假,虽然1或0不应该给你任何编译器上的错误。