2010-10-07 6 views
0

Lorsque je compile sur VS 2008 en mode deubg, tout fonctionne correctement. Lorsque je compile la même chose en mode release, tout ne fonctionne pas. Autant que je sache, les répertoires d'inclusion sont les mêmes et il n'y a pas de symboles de préprocesseur supplémentaires.Erreur lors de la compilation en mode édition mais pas en mode débogage

Une aide?

1> zlib.cpp 1> C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ xutility (419): erreur C2664: « cryptopp :: AllocatorWithCleanup :: AllocatorWithCleanup (const & cryptopp :: AllocatorWithCleanup) » : ne peut pas convertir le paramètre 1 de 'cryptopp :: AllocatorWithCleanup' à 'const cryptopp :: AllocatorWithCleanup &' 1> avec 1> [1>
T = std: : _Aux_cont 1>] 1>
et 1> [1>
T = cryptopp :: HuffmanDecoder :: CodeInfo 1>] 1> et 1> [1 > T = std :: _ Aux_cont 1>
] 1> Raison: ne peut pas convertir de 'cryptopp :: AllocatorWithCleanup' à 'const cryptopp :: AllocatorWithCleanup' 1> avec 1> [1>
T = cryptopp :: :: HuffmanDecoder CodeInfo 1>] 1> 1 et> [ 1> T = std :: _ Aux_cont 1>
] 1> Aucun opérateur de conversion définie par l'utilisateur disponible qui peut effectuer cette conversion, ou le o pérateur ne peut pas être appelé 1> C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ xutility (417): lors de la compilation membre du modèle de classe fonction « std :: _ Container_base_aux_alloc_real < _Alloc> :: _Container_base_aux_alloc_real (_Alloc) » 1> avec 1> [1>
_Alloc = cryptopp :: AllocatorWithCleanup 1>] 1> C: \ Program Files (x86) \ Microsoft Visual studio 9.0 \ VC \ include \ vecteur (421): voir référence au modèle de classe instantiation 'std :: _ Container_base_aux_alloc_real < _Alloc>' en cours de compilation 1> avec 1>
[1>
_Alloc = cryptopp :: AllocatorWithCleanup 1>] 1> C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ vecteur (439): voir référence au modèle de classe instanciation 'std :: _ Vector_val < _Ty, _Alloc>' étant compilé 1> avec 1> [1> = _Ty cryptopp :: :: HuffmanDecoder CodeInfo, 1>
_Alloc = cryptopp :: AllocatorWithCleanup 1>] 1>
C: \ monprojet \ sshlib \ zinflate.h (79): voir référence à modèle de classe d'instanciation 'std :: vecteur < _Ty, _Ax>' compilé 1> avec 1>
[1>
_Ty = cryptopp :: :: HuffmanDecoder CodeInfo, 1>
_Ax = cryptopp :: AllocatorWithCleanup 1>] 1> zinflate.cpp

La ligne de code il pointe finalement est:

std::vector<CodeInfo, AllocatorWithCleanup<CodeInfo> > m_codeToValue; 

Modifier: Plus d'informations:

Je reçois cette erreur exactement lorsque mon préprocesseur contient NDEBUG au lieu de _DEBUG. Si je change ma config release pour avoir _DEBUG isntead compile. Pourquoi?

+0

Cela ressemble à un problème de constance avec le paramètre allocator sur votre vecteur. Avez-vous plus de code? –

+0

#defining '_DEBUG' bascule fondamentalement le mode de construction en mode débogage. La stratégie d'allocation personnalisée de Microsoft STL est différente en mode de débogage et n'est pas affectée par le bogue. Voir le lien Nabble dans ma réponse ci-dessous. –

Répondre

2

C'est un bogue dans le compilateur Visual C++. Voir http://old.nabble.com/-jira--Created:-%28QPID-1458%29-C%2B%2B-common-compile-error-in-VC9-Release-mode-td20469700.html.

Vous pouvez contourner le problème en désactivant checked iterators:

#define _SECURE_SCL 0 

Mais attention: si vous établissez un lien avec une bibliothèque tiers qui a été compilé avec _SECURE_SCL activé, comme par exemple boost, la corruption de la mémoire peut (et va) se produire.

+0

Je suis assez sûr que j'avais l'habitude d'avoir cette erreur, et il est parti ... après l'installation d'un service pack Visual Studio, peut-être? Nous travaillons avec boost. –

+0

Intéressant. @MS SQL Server, pouvez-vous fournir la version exacte de votre compilateur? –

+0

C'est l'installation de base VS2008. J'espère que c'est la solution. J'essaye d'abord par applygin 2008 SP1 pour voir si cela fonctionne. Je mettrai à jour le ticket lorsque l'installation sera terminée. –

0

Revenant à C++ après de nombreuses années, j'ai rencontré une erreur similaire. Il s'est avéré que cela n'avait rien à voir avec ce bug et tout à voir avec le fait que je n'avais pas mis à jour ma configuration de Release avec les mêmes paramètres que ceux utilisés dans la configuration de Debug! Donc, pour les autres noobs - n'oubliez pas de vous assurer que vous avez les mêmes jeux de caractères, le même support CLR, inclure des répertoires, des dépendances supplémentaires, etc. dans toutes vos configurations.