2016-08-25 100 views
0

今天我正在学习如何声明结构记录类型,结构化记录类型在数组中的应用。所以基本上这是我如何开始使用结构编码。结构错误表达式必须有bool类型

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; 
    } 
+1

[FYI]'stock [4]'不好。这是未定义的行为和一个滴答作响的定时炸弹。 – NathanOliver

+0

为什么初始化'award'的值为'1'和'0',但在循环中使用'true'? –

+0

这个和'stock [0]'保存未初始化的数据。你真的需要读一本书。这非常非常**非常基本。 – IInspectable

回答

2

对于初学者来说,N个元素数组的索引的有效范围是[0,N-1]。因此,这些陈述

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

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

对于错误信息,那么它似乎不是结构名在这样

​​

语句您必须使用数组名

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

哦,数组元素范围从0,因为N-1。数组似乎很复杂。 – user3804846

0

你正在做的两件事情错了在这里:

  1. 你定义数组为myStock stock[4];,这意味着你需要ŧ o请做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,不应该给你的任何编译器错误。

+0

#2不是问题。 0是错误的,其他一切都是真实的。 – NathanOliver

+0

我看到布尔如何工作。所有我认为布尔是0或1,并应宣布在1或0.现在我明白你的观点。 – user3804846

相关问题