在发布模式下编译时出错,但在调试模式下没有

时间:2010-10-07 18:48:30

标签: c++ compiler-errors crypto++

当我在deubg模式下在VS 2008上编译时,一切正常。 当我在发布模式下编译相同的东西时,一切都行不通。据我所知,include目录是相同的,没有额外的预处理器符号。

任何帮助?

  

1> zlib.cpp 1> C:\ Program Files   (x86)\ Microsoft Visual Studio   9.0 \ VC \ include \ xutility(419):错误C2664:   “CryptoPP :: AllocatorWithCleanup :: AllocatorWithCleanup(常量   CryptoPP :: AllocatorWithCleanup&)'   :无法转换参数1   'CryptoPP :: AllocatorWithCleanup'来   “常量   CryptoPP :: AllocatorWithCleanup&'   1 GT;用1> [1>   T = std :: _ Aux_cont 1> ] 1>
  和1> [1>   T = CryptoPP :: HuffmanDecoder :: CodeInfo   1 GT; ] 1>和1> [   1 GT; T = std :: _ Aux_cont 1>
  ] 1>原因:无法转换   从   'CryptoPP :: AllocatorWithCleanup'来   “常量   CryptoPP :: AllocatorWithCleanup'1>   用1> [1>   T = CryptoPP :: HuffmanDecoder :: CodeInfo   1 GT; ] 1>和1> [   1 GT; T = std :: _ Aux_cont 1>
  ] 1>没有用户定义的转换   可执行的运营商   这种转换,或运营商   不能被称为1> C:\ PROGRAM   文件(x86)\ Microsoft Visual Studio   9.0 \ VC \ include \ xutility(417):编译类模板成员时   功能   '的std :: _ Container_base_aux_alloc_real< _Alloc> :: _ Container_base_aux_alloc_real(_Alloc)'   1 GT;用1> [1>   _Alloc = CryptoPP :: AllocatorWithCleanup   1 GT; ] 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 GT; ] 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 GT;
  _Alloc = CryptoPP :: AllocatorWithCleanup   1 GT; ] 1>
  C:\ myproject \ sshlib \ zinflate.h(79):   请参阅类模板的引用   实例化'std :: vector< _Ty,_Ax>'   正在编译1> 1 >>   [1>   _Ty = CryptoPP :: HuffmanDecoder :: CodeInfo,   1 GT;
  _AX = CryptoPP :: AllocatorWithCleanup   1 GT; ] 1> zinflate.cpp

它最终指向的代码行是:

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

修改:更多信息:

当我的预处理器包含NDEBUG而不是_DEBUG时,我确实得到了这个错误。如果我更改我的发布配置以使_DEBUG不是它编译。为什么呢?

2 个答案:

答案 0 :(得分:2)

这是Visual C ++编译器中的一个错误。请参阅http://old.nabble.com/-jira--Created:-%28QPID-1458%29-C%2B%2B-common-compile-error-in-VC9-Release-mode-td20469700.html

您可以通过停用checked iterators

来解决此问题
#define _SECURE_SCL 0

但请注意:如果您链接到已启用_SECURE_SCL编译的第三方库,例如boost,内存损坏可以(并且会发生)。

答案 1 :(得分:0)

多年后回到C ++,我遇到了类似的错误。原来它与这个bug无关,而且与我没有将我的Release配置更新到Debug配置中使用的相同设置这一事实有关!所以对于那里的其他新手 - 请记住确保在所有配置中具有相同的字符集,CLR支持,包含目录,附加依赖性等。