0

VS 2008 で deubg モードでコンパイルすると、すべて正常に動作します。リリース モードで同じものをコンパイルすると、すべてが機能するわけではありません。私が知る限り、インクルード ディレクトリは同じであり、追加のプリプロセッサ シンボルはありません。

何か助けはありますか?

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> [ 1>
T=std::_Aux_cont 1> ] 1>
および 1> [ 1>
T=CryptoPP: :HuffmanDecoder::CodeInfo 1> ] 1> and 1> [ 1> T=std::_Aux_cont 1>
] 1> 理由: 'CryptoPP::AllocatorWithCleanup' から 'const CryptoPP::AllocatorWithCleanup' 1> に変換できません 1> > [ 1>
T=CryptoPP::HuffmanDecoder::CodeInfo 1> ] 1> および 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 <_Alloc>'コンパイル中 1> with 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> _Ty=CryptoPP::HuffmanDecoder::CodeInfo, 1>
_Alloc=CryptoPP::AllocatorWithCleanup 1> ] 1>
C:\myproject\sshlib\zinflate.h(79) : 参照を参照クラス テンプレートのインスタンス化 'std::vector<_Ty,_Ax>' は 1>
[ 1>
_Ty=CryptoPP::HuffmanDecoder::CodeInfo, 1>
_Ax=CryptoPP::AllocatorWithCleanup 1> ] 1>zinflate でコンパイルされます。 cpp

最終的に指すコード行は次のとおりです。

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

編集:詳細:

このエラーは、プリプロセッサに _DEBUG ではなく NDEBUG が含まれている場合に発生します。リリース構成を変更して _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

ただし、注意してください: たとえばboost_SECURE_SCLのように、有効にしてコンパイルされたサードパーティ ライブラリに対してリンクすると、メモリの破損が発生する可能性があります (発生する可能性があります)。

于 2010-10-07T19:13:25.447 に答える
1

何年も経ってから C++ に戻ると、同様のエラーが発生しました。このバグとは何の関係もなく、リリース構成をデバッグ構成で使用されているのと同じ設定に更新していなかったという事実とすべてが関係していることが判明しました! したがって、他の初心者の場合は、すべての構成で同じ文字セット、CLR サポート、インクルード ディレクトリ、追加の依存関係などがあることを確認してください。

于 2011-11-15T15:40:25.217 に答える