Ошибка компиляции в режиме выпуска, но не в режиме отладки

Когда я компилирую VS 2008 в режиме deubg, все работает нормально. Когда я компилирую то же самое в режиме выпуска, не все работает. Насколько я могу судить, каталоги включения такие же, и никаких дополнительных символов препроцессора нет.

Любая помощь?

1> zlib.cpp 1> C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ xutility (419): ошибка C2664: 'CryptoPP :: AllocatorWithCleanup :: AllocatorWithCleanup (const CryptoPP :: AllocatorWithCleanup &)' : невозможно преобразовать параметр 1 из 'CryptoPP :: AllocatorWithCleanup' в 'const CryptoPP :: AllocatorWithCleanup &' 1> с 1> [1>
T = std :: _ Aux_cont 1>] 1>
и 1> [ 1>
T = CryptoPP :: HuffmanDecoder :: CodeInfo 1>] 1> и 1> [1> T = std :: _ Aux_cont 1>
] 1> Причина: невозможно выполнить преобразование из 'CryptoPP :: AllocatorWithCleanup' в 'const CryptoPP :: AllocatorWithCleanup' 1> с 1> [1>
T = CryptoPP :: HuffmanDecoder :: CodeInfo 1>] 1> и 1> [1> T = std :: _ Aux_cont 1>
] 1> Нет доступного оператора преобразования, определяемого пользователем, который мог бы выполнить это преобразование, или оператор не может быть вызван 1> C: \ Program Files (x86) \ Microsoft Visu al Studio 9.0 \ VC \ include \ xutility (417): при компиляции функции-члена шаблона класса 'std :: _ Container_base_aux_alloc_real ‹_Alloc> :: _ Container_base_aux_alloc_real (_Alloc)' 1> с 1> [1>
_Alloc = CryptoPP :: AllocatorWithCleanup 1>] 1> C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ vector (421): см. Ссылку на создание экземпляра шаблона класса 'std :: _ Container_base_aux_alloc_real ‹_Alloc>', компилируемого 1> с 1 >
[1>
_Alloc = CryptoPP :: AllocatorWithCleanup 1>] 1> C: \ Program Files (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ vector (439): см. ссылку на создание экземпляра шаблона класса 'std :: _ Vector_val ‹_Ty, _Alloc>' компилируется 1> с 1> [1> _Ty = CryptoPP :: HuffmanDecoder :: CodeInfo, 1>
_Alloc = CryptoPP :: AllocatorWithCleanup 1>] 1>
C: \ myproject \ sshlib \ zinflate.h (79): см. Ссылку на создание экземпляра шаблона класса 'std :: vector ‹_Ty, _Ax> 'компилируется 1> с 1>
[1>
_Ty = CryptoPP :: HuffmanDecoder :: CodeInfo, 1>
_Ax = CryptoPP :: AllocatorWithCleanup 1>] 1> zinflate.cpp

Строка кода, на которую он в конечном итоге указывает:

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

Изменить: дополнительная информация:

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


person MS SQL Server    schedule 07.10.2010    source источник
comment
Похоже на проблему константности с параметром распределителя в вашем векторе. У вас есть еще код?   -  person Steve Townsend    schedule 07.10.2010
comment
#defining _DEBUG в основном переключает сборку в режим отладки. Стратегия настраиваемого распределителя Microsoft STL отличается в режиме отладки, и на нее не влияет ошибка. См. Ссылку Nabble в моем ответе ниже.   -  person Frédéric Hamidi    schedule 07.10.2010


Ответы (2)


Это ошибка компилятора Visual C ++. См. http://old.nabble.com/-jira--Created%3a-%28QPID-1458%29-C%2B%2B-common-compile-error-in-VC9-Release-mode.-td20469700.html.

Вы можете обойти это, отключив проверенные итераторы :

#define _SECURE_SCL 0

Но будьте осторожны: если вы ссылаетесь на стороннюю библиотеку, которая была скомпилирована с включенным _SECURE_SCL, например, boost, повреждение памяти может (и будет) произойти.

person Frédéric Hamidi    schedule 07.10.2010
comment
Я почти уверен, что раньше у меня была эта ошибка, и она исчезла ... возможно, после установки пакета обновления Visual Studio? Работаем с наддувом. - person Alex Emelianov; 07.10.2010
comment
Интересно. @MS SQL Server, можете ли вы предоставить точную версию своего компилятора? - person Frédéric Hamidi; 07.10.2010
comment
Это базовая установка VS2008. Я надеюсь, что это решение. Сначала я пытаюсь применить applygin 2008 SP1, чтобы проверить, работает ли это. Я обновлю билет, когда установка будет завершена. - person MS SQL Server; 07.10.2010
comment
Флаг работал как шарм, но я использую ускорение, но он связан отдельно, поэтому я немного напуган. Сам SP1 ничего не сделал для решения проблемы. Есть ли у меня другие варианты? - person MS SQL Server; 08.10.2010
comment
Попробуйте установить все обновления с http://update.microsoft.com/. Перезагрузите вашу машину. Включить проверенные итераторы. Сделайте глубокий вдох. Восстановите свое решение. Держать нас в курсе :) - person Frédéric Hamidi; 08.10.2010

Вернувшись к C ++ спустя много лет, я столкнулся с аналогичной ошибкой. Оказалось, что это не имеет ничего общего с этой ошибкой, а все связано с тем фактом, что я не обновил свою конфигурацию выпуска до тех же параметров, которые использовались в конфигурации отладки! Так что для других новичков - не забудьте убедиться, что у вас одинаковые наборы символов, поддержка CLR, каталоги включения, дополнительные зависимости и т. Д. Во всех ваших конфигурациях.

person sfuqua    schedule 15.11.2011