2010-11-02 4 views
32

Я только что перешел на решение Visual Studio (C++) на другой компьютер, установил все каталоги и настройки, насколько я могу видеть, и сделал очистить/восстановить на решении. Я получаю ошибку выше на кучу .obj на компиляции, не уверен, что с этим делать.Значение _iterator_debug_level '0' не соответствует значению '2'

ответ

26

Кажется, что вы смешиваете объектные файлы, созданные с различными настройками. Попробуйте выполнить полную очистку и проверьте все параметры файла проекта, чтобы убедиться, что макрос _ITERATOR_DEBUG_LEVEL одинаков (например, вы не смешиваете отлаживаемые и выпущенные встроенные объекты).

+4

По какой-то причине один из моих проектов имел _SECURE_SCL = 1, определенный в режиме деблокирования, и это вызвало ошибку компоновщика. – Gyuri

+0

Другая возможность - некоторый файл проекта/источника, определяющий _HAS_ITERATOR_DEBUGGING – korbes

16

Смешивание двоичных файлов (объектных файлов) является одной из причин; другой (с которым я столкнулся) является ложным определением макроса _DEBUG в сборке релизов. _DEBUG не является стандартным макросом, но используется Microsoft.

После редактирования .vcxproj -файла в Emacs Я опечатался _DEBUG вместо NDEBUG для выпуска, и столкнулся с точно такой же ошибкой сборки.

+0

bang on ...... :) – Sandip

13

В некоторых случаях смешивание вариантов в

Свойства> Конфигурация Свойства> C/C++> Генерация кода> Runtime Библиотека

Между включены библиотеки (страны) и в настоящее время рабочий проект может вызвать эту проблему.

В зависимости от использования установить его в качестве /MD или /MT или /MDd или /MTd равномерно по всем проектам.

+0

Спасибо, это сработало. – lourencoccc

0

Я узнал (как это ни странно), что _CRT_NON_CONFORMING_SWPRINTFS вызывает это. Когда я удаляю его, я не получаю «_iterator_debug_level значение« 0 »не соответствует значению« 2 », но вместо этого следующее предупреждение:

Ошибка 6 ошибка C4996: '_swprintf': swprintf был изменен для соответствия со стандартом ISO C, добавляя дополнительный параметр счетчика символов. Чтобы использовать традиционный Microsoft swprintf, установите _CRT_NON_CONFORMING_SWPRINTFS.

0

Я пытался решить эту проблему в течение пяти дней. Код Cloud Cloud Library (PCL) успешно работает в режиме отладки, но не работает в режиме деблокирования.

Я несколько раз переконфигурировал свою библиотеку, но это не помогло. Я обнаружил, что проблема заключается в том, что версия выпуска наследует _DEBUG, поэтому я отключил ее по свойствам проекта >> Препроцессор >> Определения процессора и он был решен.

Смежные вопросы