我正在将一个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-)并使用发布配置模式构建项目。 代码建立成功。
具有相同设置的相同代码无法在调试模式下构建。 任何人都可以帮我解决这个问题。
感谢任何帮助。
谢谢, 拉克希米
答案 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
的循环之间存在某个位置。如果每个循环的使用完全是它们各自循环的本地,那么只需执行此操作并继续使用您的端口。