2010-11-02 24 views
32

Je viens de passer une solution Visual Studio (C++) sur un autre ordinateur, de configurer tous les répertoires et les paramètres aussi loin que je peux voir, et j'ai fait un nettoyer/reconstruire sur la solution. Je reçois l'erreur ci-dessus sur un tas de .obj sur la compilation, je ne sais pas quoi faire à ce sujet.La valeur _iterator_debug_level '0' ne correspond pas à la valeur '2'

Répondre

26

Il semble que vous mélangez des fichiers objets construits avec des paramètres différents. Essayez de procéder à une reconstruction complète et vérifiez tous les paramètres de fichier de projet pour vous assurer que la macro _ITERATOR_DEBUG_LEVEL est la même (par exemple, vous ne mélangez pas les objets construits de débogage et de publication).

+4

Pour une raison quelconque, l'un de mes projets avait _SECURE_SCL = 1 défini en mode de libération, ce qui a provoqué l'erreur de l'éditeur de liens. – Gyuri

+0

Une autre possibilité est un fichier projet/source définissant _HAS_ITERATOR_DEBUGGING – korbes

16

La combinaison de fichiers binaires (fichiers objets) en est une raison; un autre (que j'ai rencontré) est la fausse définition de la macro _DEBUG dans la version release. _DEBUG n'est pas une macro standard, mais utilisée par Microsoft.

Après avoir modifié le .vcxproj -file dans Emacs I au lieu de _DEBUG des fautes de frappe NDEBUG pour la libération, et rencontré exactement la même erreur de construction.

+0

bang sur ...... :) – Sandip

13

Dans certains cas, le mélange des options

Propriétés> Propriétés de configuration> C/C++> Génération de code> Runtime Bibliothèque

Entre inclus Bibliothèque (s) et actuellement projet de travail peut causer ce problème.

Selon l'utilisation définie comme /MD ou /MT ou /MDd ou /MTd uniformément dans tous les projets.

+0

Merci, cela a fonctionné. – lourencoccc

0

J'ai découvert (curieusement) que _CRT_NON_CONFORMING_SWPRINTFS le cause. Lorsque je le supprime, je n'obtiens pas la valeur "_iterator_debug_level" 0 "ne correspond pas à la valeur" 2 "" mais l'avertissement suivant:

Erreur 6 erreur C4996: '_swprintf': swprintf a été modifié pour être conforme avec la norme ISO C, en ajoutant un paramètre de nombre de caractères supplémentaire. Pour utiliser Microsoft swprintf traditionnel, définissez _CRT_NON_CONFORMING_SWPRINTFS.

0

J'ai essayé de résoudre ce problème pendant cinq jours. Le code PCL (Point Cloud Library) se construit avec succès en mode débogage mais échoue en mode de publication.

J'ai reconfiguré ma bibliothèque plusieurs fois mais cela n'a pas aidé. J'ai trouvé que le problème était que la version de publication héritait de _DEBUG, donc je l'ai décoché sous les propriétés du projet >> Preprocessor >> Définitions du processeur et il a été résolu.