2009-06-02 28 views
1

我正在嘗試使用Microsoft VisualStudio 2008編譯C++項目。如果您使用Win32作爲目標平臺,此特定項目編譯良好。如果我嘗試編譯爲x64平臺相同的項目,我在這一行獲得C2593 'operator identifier' is ambiguous錯誤:在爲x64平臺編譯時出現c2593錯誤(運算符標識符不明確)

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

任何人有一個線索,爲什麼在同一行編譯罰款爲32位,但未能對64位這樣的高級錯誤?

回答

2

好吧,明白了。問題是size_t數據類型對於兩個不同的平臺具有不同的大小。操作< <爲數據類型的不同列表中定義:

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

在32位平臺上「無符號整型」是爲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

或unsigned long而不是爲size_t – 2009-06-02 14:04:54

相關問題