0

当我在调试模式下在 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> with 1> [ 1>
T=std::_Aux_cont 1> ] 1>
and 1> [ 1>
T=CryptoPP: :HuffmanDecoder::CodeInfo 1> ] 1> 和 1> [ 1> T=std::_Aux_cont 1>
] 1> 原因:无法从 'CryptoPP::AllocatorWithCleanup' 转换为 'const CryptoPP::AllocatorWithCleanup' 1> with 1 > [ 1>
T=CryptoPP::HuffmanDecoder::CodeInfo 1> ] 1> and 1> [ 1> T=std::_Aux_cont 1>
] 1> 没有可以执行此转换的用户定义转换运算符,或者该运算符不能调用 1> C:\Program Files (x86)\Microsoft Visual 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 <_分配>'正在编译 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> with 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 而不是它可以编译。为什么?

4

2 回答 2

2

这是 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,则可能(并且将会)发生内存损坏。

于 2010-10-07T19:13:25.447 回答
1

多年后回到C++,我遇到了类似的错误。原来它与这个错误无关,而一切都与我没有将我的发布配置更新为与调试配置中使用的设置相同的事实有关!因此,对于其他菜鸟,请记住确保您在所有配置中具有相同的字符集、CLR 支持、包含目录、附加依赖项等等。

于 2011-11-15T15:40:25.217 回答