"Scoping" C++编译错误

"Scoping" C ++ compilation Error

本文关键字:错误 编译 C++ Scoping      更新时间:2023-10-16

我似乎不知道是什么导致以下错误:

trainLine.cpp:108:错误:名称查找' i '更改为新的ISO ' for '作用域

trainLine.cpp:98:错误:在' i '处使用过时的绑定

下面是导致错误的代码:

int main()
{
  pthread_t tidArray[NUM_TRAINS];
  Train* trainArray[NUM_TRAINS];
  for (int i = 0; i < NUM_TRAINS;  i++)
    trainArray[i] = new Train(TRAIN_NAME_ARRAY[i], TRAIN_TRANSIT_TIME_MSECS[i]);
  int trainInd = 0;
  pthread_create(&tidArray[i], NULL, initiallyNorthernly,(void*)&trainArray[i]);
  pthread_create(&tidArray[i], NULL, initiallySouthernly,(void*)&trainArray[i]);
  for  (int i = 0; i < NUM_TRAINS;  i++)
    trainArray[i] = NULL;
  pthread_join(tidArray[i], (void**)&trainInd);
  return(EXIT_SUCCESS);
}

我提前道歉,但我对C/c++非常陌生,没有任何事情突然出现在我身上。可能没有在循环语句周围放括号?谢谢你的帮助。

行内:

pthread_join(tidArray[i], (void**)&trainInd);

你引用的是i,它超出了作用域。我猜你实际上是想让它成为循环的一部分,例如

for (int i = 0; i < NUM_TRAINS; ++i)
    pthread_join(tidArray[i], (void**)&trainInd);

您的变量i只存在于for -循环内,但您试图在循环外使用它。

这样做可以解决这个问题,而不会改变代码的效果:

  // ...
  int i = 0; // i is now accessible outside the loop as well
  for  (;  i < NUM_TRAINS;  i++)
    trainArray[i] = new     Train(TRAIN_NAME_ARRAY[i],TRAIN_TRANSIT_TIME_MSECS[i]);
  // use i, which is equal to NUM_TRAINS at this point