调试版本中的VC ++错误C2065

时间:2010-09-13 20:02:55

标签: visual-c++

我正在将一个C ++项目移植到VS2008。 一段代码有一个在for循环语句中声明的变量,如下所示:

for(bmpMapType :: const_iterator it = bitmaps.begin(); it!= bitmaps.end(); ++ it) {

}

“it”稍后在另一个for循环语句中用作索引,如下所示: for(it = bitmaps.begin(); it!= bitmaps.end(); ++ it) {

}

它在调试版本中生成错误c2065,以及下面的项目设置,其中发布版本成功。

我已经设置了C \ C ++>语言与GT;对于符合性将For循环范围设置为否(/ Zc:forscope-)并使用发布配置模式构建项目。 代码建立成功。

具有相同设置的相同代码无法在调试模式下构建。 任何人都可以帮我解决这个问题。

感谢任何帮助。

谢谢, 拉克希米

2 个答案:

答案 0 :(得分:1)

it变量在for循环初始化列表中声明,这意味着它的作用域与for循环作用域一起结束。设置/Zc:forscope-选项启用MS特定扩展,使it声明保持活动状态,直到定义for循环的封闭范围结束(例如,您的代码片段的任何函数体)存在于)。恕我直言,你不应该使用/Zc:forscope-标志,因为它编译非标准代码而没有错误。要解决您的问题,您可以执行以下两项操作之一:

bmpMapType::const_iterator it;
//first loop
for( it = bitmaps.begin(); it != bitmaps.end(); ++it ) { ... }
...
//second loop
for( it = bitmaps.begin(); it != bitmaps.end(); ++it ) { ... }

//first loop
for( bmpMapType::const_iterator it = bitmaps.begin(); it != bitmaps.end(); ++it ) { ... }
...
//second loop
for( bmpMapType::const_iterator it = bitmaps.begin(); it != bitmaps.end(); ++it ) { ... }

答案 1 :(得分:0)

一个简单的修复可能只是修改第二个循环以匹配第一个循环 - 根据

声明自己的it副本
for(bmpMapType::const_iterator it = bitmaps.begin(); it != bitmaps.end(); ++it) {

}

除非在使用第一个it的循环之间存在某个位置。如果每个循环的使用完全是它们各自循环的本地,那么只需执行此操作并继续使用您的端口。