2009-06-02 16 views
1

Microsoft VisualStudio 2008を使用してC++プロジェクトをコンパイルしようとしています。この特定のプロジェクトはWin32をターゲットプラットフォームとして使用すると問題なくコンパイルされます。x64プラットフォーム用にコンパイルするとc2593エラー(オペレータ識別子が不明瞭)

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

誰もが同じ行は、32ビットの罰金コンパイルするが、そのような64ビットのために失敗した理由を手掛かりを持っている:私は、x64プラットフォームで同じプロジェクトをコンパイルしようとした場合、私は、この行のC2593 'operator identifier' is ambiguousエラーが出ます高レベルのエラー?

答えて

2

[OK]を取得します。問題は、2つの異なるplattformのサイズが異なるsize_tデータ型です。オペレータ< <は、データ型のさまざまなリストのために定義されます。32ビットプラットフォームでは

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

「unsigned int型は」size_tのために完璧にマッチです。 64ビットプラットフォームでは、size_tは64ビットであり、演算子の宣言と正確には一致しません。

溶液が正しいデータ型を使用して、正確なオペレータを選択することである。

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

またはsize_t型を使用してオペレータをオーバーロード:

StringBuffer& operator<<(size_t)  { _UITOA(n); } 
+0

または符号なしのロングなくsize_tの –

+1

またはテンプレート法(彼らはすべてが文字列に変換されているように見えるので(PS)boost :: lexical_cast <>() –

関連する問題