“范围”C ++编译错误

时间:2015-05-22 11:30:20

标签: c++ compiler-errors pthreads

我似乎无法弄清楚导致以下错误的原因:

  

trainLine.cpp:108:错误:'i'的名称查找已更改为新的ISO'用于'范围'

     

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 ++很陌生,没有任何东西对我来说是错误的。可能没有为循环语句放置括号?提前感谢您的帮助。

2 个答案:

答案 0 :(得分:1)

您的变量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

答案 1 :(得分:1)

在行中:

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

您引用i,这超出了范围。我猜你真的想让它成为循环的一部分,例如

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