Je viens de déplacer une solution Visual Studio (C++) sur un autre ordinateur, de configurer tous les répertoires et paramètres à ma connaissance et de nettoyer/reconstruire la solution. J'obtiens l'erreur ci-dessus sur un tas de .obj sur la compilation, je ne sais pas quoi faire à ce sujet.
Il semble que vous mélangez des fichiers objets créés avec différents paramètres. Essayez de faire une régénération complète et vérifiez tous les paramètres du fichier de projet pour vous assurer que la macro _ITERATOR_DEBUG_LEVEL est la même (par exemple, vous ne mélangez pas le débogage et la libération des objets construits).
Le mélange de binaires (fichiers objets) est une des raisons; une autre (que j'ai rencontrée) est la fausse définition du _DEBUG
macro dans la version. _DEBUG
n'est pas une macro standard, mais utilisée par Microsoft.
Après avoir édité le fichier . Vcxproj - dans Emacs, j'ai mal tapé _DEBUG
au lieu de NDEBUG
pour la version, et a rencontré précisément la même erreur de construction.
Dans certains cas, mélanger les options dans
Propriétés> Propriétés de configuration> C/C++> Génération de code> Bibliothèque d'exécution
Entre bibliothèque (s) incluse (s) et projet en cours de travail peut provoquer ce problème.
Selon l'utilisation, définissez-le comme /MD
ou /MT
ou /MDd
ou /MTd
uniformément dans tous les projets.
J'essaie de résoudre ce problème depuis cinq jours. Le code de la bibliothèque de nuages de points (PCL) se construit correctement 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 finale héritait de _DEBUG, je l'ai donc décochée sous les propriétés du projet >> Préprocesseur >> Définitions du processeur et cela a été résolu.
J'ai découvert (bizarrement) que _CRT_NON_CONFORMING_SWPRINTFS en est la cause. Lorsque je le supprime, je ne reçois pas la valeur "_iterator_debug_level '0' ne correspond pas à la valeur '2'" mais à la place l'avertissement suivant:
Erreur 6 erreur C4996: '_swprintf': swprintf a été modifié pour se conformer à la norme ISO C, en ajoutant un paramètre de comptage de caractères supplémentaire. Pour utiliser le swprintf Microsoft traditionnel, définissez _CRT_NON_CONFORMING_SWPRINTFS.