Когда я компилирую 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 не компилировался. Почему?
_DEBUGв основном переключает сборку в режим отладки. Стратегия настраиваемого распределителя Microsoft STL отличается в режиме отладки, и на нее не влияет ошибка. См. Ссылку Nabble в моем ответе ниже. - person Frédéric Hamidi   schedule 07.10.2010