Ошибка VC ++ C2065 в отладочной сборке - PullRequest
0 голосов
/ 14 сентября 2010

Я портирую проект C ++ на VS2008.Часть кода имеет переменную, объявленную в операторе цикла for, как показано ниже:

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

}

"it" позже используется в качестве индекса в другом операторе цикла, как показано ниже: for (it = bitmaps.begin (); it! = Bitmaps.end (); ++ it) {

}

Выдает ошибку c2065 в отладочной сборке с указанными ниже настройками проекта, когда сборка выпуска была успешной.

Я установил C \ C ++>Язык> Для соответствия In Для цикла Scope to No (/ Zc: forscope-) и построен проект с режимом конфигурации выпуска.Код был успешно создан.

Один и тот же код с теми же настройками не может быть собран в режиме отладки.Может кто-нибудь помочь мне решить проблему.

Любая помощь приветствуется.

Спасибо, Лакшми

Ответы [ 2 ]

1 голос
/ 14 сентября 2010

Переменная 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 ) { ... }
0 голосов
/ 14 сентября 2010

Простое исправление может состоять в том, чтобы просто изменить второй цикл так, чтобы он соответствовал первому, - объявив собственную копию it согласно

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

}

, если между циклами нет места, где используется первый it. Если использование каждого из них полностью локально для соответствующих циклов, просто сделайте это и продолжайте работу с вашим портом.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...