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、ループに続くブロックでの使用をコメント解除すると、エラーが発生します。これは一部のコンパイラでは正当でした。つまり、ループ内でi宣言さforれたものは、実際には外側のスコープ内で宣言されていました。これは標準化中に変更されました (C++ 1998 用)。

于 2012-10-19T18:31:27.263 に答える