C++ 在发布模式下但不在调试模式下编译时出错

C++ 在发布模式下但不在调试模式下编译时出错,c++,compiler-errors,crypto++,C++,Compiler Errors,Crypto++,当我在VS2008上以deubg模式编译时,一切都很好。 当我在发布模式下编译相同的东西时,并不是所有的东西都能工作。据我所知,include目录是相同的,并且没有额外的预处理器符号 有什么帮助吗 1> zlib.cpp 1>C:\程序文件 (x86)\Microsoft Visual Studio 9.0\VC\include\xutility(419):错误C2664: 'CryptoPP::AllocatorWithCleanup::AllocatorWithCleanup(常量 Cryp

当我在VS2008上以deubg模式编译时,一切都很好。 当我在发布模式下编译相同的东西时,并不是所有的东西都能工作。据我所知,include目录是相同的,并且没有额外的预处理器符号

有什么帮助吗

1> zlib.cpp 1>C:\程序文件 (x86)\Microsoft Visual Studio 9.0\VC\include\xutility(419):错误C2664: 'CryptoPP::AllocatorWithCleanup::AllocatorWithCleanup(常量 CryptoPP::AllocatorWithCleanup&)' :无法从转换参数1 “CryptoPP::AllocatorWithCleanup”到 “康斯特 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”到 “康斯特 CryptoPP::AllocatorWithCleanup“1> 用1>[1>
T=CryptoPP::HuffmanDecoder::CodeInfo 1> ]1>和1>[ 1> T=std::_Aux_cont 1>
]1>没有用户定义的转换 可执行以下操作的操作员 此转换或运算符 无法调用1>C:\程序 文件(x86)\Microsoft Visual Studio 9.0\VC\include\xutility(417):编译类模板成员时 功能 'std::_Container_base_aux_alloc_real::_Container_base_aux_alloc_real(_alloc)' 1> 用1>[1>
_Alloc=CryptoPP::AllocatorWithCleanup 1> ]1>C:\程序文件 (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:\程序文件 (x86)\Microsoft Visual Studio 9.0\VC\include\vector(439):参见类模板参考 实例化 'std::_Vector_val'being 用1>编译1>[1> _Ty=CryptoPP::HuffmanDecoder::CodeInfo, 1>
_Alloc=CryptoPP::AllocatorWithCleanup 1> ]1>
C:\myproject\sshlib\zinflate.h(79): 请参见对类模板的引用 实例化“std::vector” 正在用1>编译1>
[1>
_Ty=CryptoPP::HuffmanDecoder::CodeInfo, 1>
_Ax=CryptoPP::AllocatorWithCleanup 1> ]1>zinflate.cpp

它最终指向的代码行是:

std::vector<CodeInfo, AllocatorWithCleanup<CodeInfo> > m_codeToValue;
std::向量m_code值;
编辑:更多信息:


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

< p>这是VisualC++编译器中的一个bug。看

您可以通过禁用以下功能来解决此问题:


但请注意:如果链接到一个第三方库,该库是用<代码>编译的,SyReURIOSSCL< /COD>启用,比如内存损坏(可能会发生)。

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

看起来向量上的分配器参数存在常量问题。您有更多的代码吗?#定义
\u DEBUG
基本上将构建切换到调试模式。Microsoft STL的自定义分配器策略在调试模式下不同,并且不受错误的影响。请看下面我的答案中的Nabble链接。我很确定我曾经有过这个错误,它消失了。。。安装VisualStudio service pack之后,可能是吗?我们确实与boost合作。很有趣@MS SQL Server,您能提供编译器的确切版本吗?它是基本VS2008安装。我希望这就是解决办法。我首先尝试使用Applygin2008SP1,看看这是否有效。我将在安装完成后更新票证。该标志像一个符咒一样工作,但我确实使用boost,但它是单独链接的,所以我有点害怕。SP1本身并没有解决这个问题。我还有其他选择吗?请尝试从安装所有更新。重新启动你的机器。启用选中迭代器。深呼吸。重建您的解决方案。随时向我们通报:)
#define _SECURE_SCL 0