当我在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不是它编译。为什么呢?
答案 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支持,包含目录,附加依赖性等。