0

我正在使用如下代码:

const int NUMBER_OF_FIELDS = 3;
int fieldIndex = 0;
int values[NUMBER_OF_FIELDS];

void setup()
  {
  Serial.begin(9600);
  }

void loop()
  {
   if(Serial.available())
    {
     char ch = Serial.read();
     if(ch>='0' && ch <= '9')
       {
       values[fieldIndex] = (values[fieldIndex]*10 +(ch-'0'));
       }
      else if (ch == ',')
       {
        if(fieldIndex < NUMBER_OF_FIELDS -1)
        fieldIndex++;
       }
      else 
       {
       Serial.print(fieldIndex+1);
       Serial.println("fields recieved:");
       for (int i = 0; i<=fieldIndex; i++);
         {
         //Serial.println(values[i]);
         //values[i]= 0;
         }
        fieldIndex = 0; 
       } 
    } 
  }

但我收到一条错误消息:

'i' 的名称查找已更改为新的 ISO 'for' 范围

我认为我在 for 循环中没有做错任何事情,那么为什么会出现此错误?

4

4 回答 4

6

在 for 之后有一个分号,因此仅具有 for 循环范围的 int i 在 for 循环之外无效。

您可能打算执行以下操作。

  for (int i = 0; i<=fieldIndex; i++)     // no semicolon
  {
     Serial.println(values[i]);
     values[i]= 0;
  }
于 2012-10-19T18:30:12.603 回答
4

您“关闭” for 循环的问题;

for (int i = 0; i<=fieldIndex; i++); // <-----
于 2012-10-19T18:30:29.447 回答
3
for (int i = 0; i<=fieldIndex; i++); <-----
于 2012-10-19T18:30:19.727 回答
2

问题是你的for循环什么都不做:循环的主体在循环之后的分号处结束:

for (int i = 0; i<=fieldIndex; i++);
                                   ^ here

也就是说,如果你取消注释i循环后面的块中的使用,你会得到一个错误。这在某些编译器中曾经是合法的,即ifor循环中声明的实际上是在封闭范围内声明的。这在标准化期间发生了变化(对于 C++ 1998)。

于 2012-10-19T18:31:27.263 回答