1

Microsoft VisualStudio2008を使用してC++プロジェクトをコンパイルしようとしています。この特定のプロジェクトは、ターゲットプラットフォームとしてWin32を使用すると正常にコンパイルされます。x64プラットフォーム用に同じプロジェクトをコンパイルしようとすると、C2593の「演算子識別子」が次の行にあいまいなエラーで表示されます。

case 't':  os_ << (size_t)path->rnode->char_type;     break;

同じ行が32ビットでは正常にコンパイルされ、64ビットではこのような高レベルのエラーで失敗する理由を誰かが知っていますか?

4

1 に答える 1

2

はい、わかった。問題は、2つの異なるプラットフォームに対して異なるサイズを持つsize_tデータ型です。演算子<<は、データ型のさまざまなリストに対して定義されています。

StringBuffer& operator<<(unsigned short int n) { _UITOA(n); }
StringBuffer& operator<<(unsigned int n)       { _UITOA(n); }

32ビットプラットフォームでは、「unsignedint」はsize_tに完全に一致します。64ビットプラットフォームでは、size_tは64ビットであり、どの演算子宣言とも完全には一致しません。

解決策は、正しいデータ型を使用して正確な演算子を選択することです。

case 't':  os_ << (unsigned int)path->rnode->char_type;     break;

または、size_tを使用して演算子をオーバーロードします。

StringBuffer& operator<<(size_t)       { _UITOA(n); }
于 2009-06-02T13:53:47.703 に答える