Visual c++ VC++;调试生成中出现错误C2065

Visual c++ VC++;调试生成中出现错误C2065,visual-c++,Visual C++,我将一个C++项目移植到VS2008。 这段代码在for循环语句中声明了一个变量,如下所示: 对于(bmpMapType::const_迭代器it=bitmaps.begin();it!=bitmaps.end();++it) { } “it”稍后在另一个for循环语句中用作索引,如下所示: for(it=bitmaps.begin();it!=bitmaps.end();+it) { } 它在调试生成中生成错误c2065,该错误包含以下项目设置,其中as发布生成成功 我已经将For循环范围中的

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

对于(bmpMapType::const_迭代器it=bitmaps.begin();it!=bitmaps.end();++it) {

}

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

}

它在调试生成中生成错误c2065,该错误包含以下项目设置,其中as发布生成成功

我已经将For循环范围中的C\C++>Language>一致性设置为No(/Zc:forscope-),并使用发布配置模式构建了项目。 代码构建成功

具有相同设置的相同代码无法在调试模式下生成。 谁能帮我解决这个问题

感谢您的帮助

谢谢,
Lakshmi

变量
it
for
循环初始值设定项列表中声明,这意味着它的作用域随
for
循环作用域一起结束。设置
/Zc:forscope-
选项可启用MS特定扩展,该扩展使
声明保持活动状态,直到定义
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 ) { ... }

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

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

}

除非在循环之间的某个地方使用第一个
。如果每个循环的使用都是完全本地的,那么就这样做,继续使用您的端口。

谢谢。那很好。我有一个问题,为什么它在发布模式下工作,而没有像前面提到的那样再次声明它确保
/Zc:forscope
标志在调试和发布模式下具有相同的设置,据我所知,如果该标志设置一致,则它应该在两种生成配置中生成或失败。