Ошибка компиляции в режиме выпуска, но не в режиме отладки - PullRequest
0 голосов
/ 07 октября 2010

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

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

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>
Т = CryptoPP :: HuffmanDecoder :: CodeInfo 1>] 1> и 1> [ 1> T = std :: _ Aux_cont 1>
] 1> Причина: невозможно конвертировать от 'CryptoPP :: AllocatorWithCleanup' для «Const CryptoPP :: AllocatorWithCleanup '1> с 1> [1>
Т = CryptoPP :: HuffmanDecoder :: CodeInfo 1>] 1> и 1> [ 1> T = std :: _ Aux_cont 1>
] 1> Нет пользовательского преобразования оператор, который может выполнять это преобразование или оператор нельзя назвать 1> C: \ Program Файлы (x86) \ Microsoft Visual Studio 9.0 \ VC \ include \ xutility (417): при компиляции члена шаблона класса функция 'Станд :: _ 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): см. Ссылку на шаблон класса конкретизации 'Станд :: _ 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 вместо нее, она компилировалась. Почему?

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

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

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

#define _SECURE_SCL 0

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

0 голосов
/ 15 ноября 2011

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

...