2012-01-20 71 views
0
template<typename T> T SmartIO::Peek() { 
    T temp; 
    T tempReturn; 

    while(true){ 
     temp = *(T*)&buffer[ptrSeek]; 

     if(temp !=0){ 
      ptrSeek++; 
      tempReturn += *(T*)&buffer[ptrSeek]; 
     } 
     else{ 
      break; 
     } 
    } 

    return tempReturn; 
} 

所以我想要做的是,從ptrSeek開始讀取循環,將值添加到temp並檢查temp的值!= 0將此值添加到tempReturn,一旦臨時的值是0打破循環,並返回tempReturnbut,但它不斷給我這個錯誤:錯誤C2678:二進制'!=':沒有找到需要左手操作數的操作符

error C2678: binary '!=' : no operator found which takes a left-hand operand of type 'std::basic_string<_Elem,_Traits,_Ax>' (or there is no acceptable conversion) 

我怎麼可以在這裏解決這個問題呢?

回答

4

沒有您的模板代碼一個根本性的問題,如果你正試圖比較任意類型T對數字常量0,你在這裏做代碼:

T temp; 

/* ... */ 

if(temp != 0){ 
    /* ... */ 
} 

這裏的問題是, T是任意類型(在這種情況下,你似乎是用實例化的std::string模板),但你期待該類型可比較爲0,這是完全正常的 - 它只是限制T是可以對被比較的類型0 - 但事實上,你報告這是一個錯誤,我不知道你是否知道這一點。

你的選擇或者不是用std::string作爲參數來實例化這個模板(它的寫法,我不認爲你應該能夠做到這一點,因爲它看起來像函數不斷增加值某種類型的),或者調試模板並改變其行爲。我不太清楚你想要代碼做什麼,所以在後一種情況下,我不知道我可以如何提供幫助。

希望能澄清一些事情!

+0

我所要做的就是檢查temp是否有值或沒有值,我會打斷循環。 – Abanoub

+0

你是什麼意思「有價值與否?」一切都有價值。你的意思是它是否有你關心的某個特定的價值? – templatetypedef

+0

好吧,我希望它返回下一個可用的字符,這是我的主要觀點,然後我想把它作爲模板,所以我可以返回下一個可用的類型,我把它傳遞給模板! – Abanoub

0

對於與0不能直接比較的類型,您可以將專用或過載比較部分(此處爲!=)。只是一個例子,

template<typename T> 
bool NotEqualto0 (const T& obj) { return (obj != 0); } 

// overload for std::string  
bool NotEqualto0 (const std::string &s) { return (s.c_str() != 0); } 

... 
if(NotEqualto0(temp)) 
... 

[以上功能被硬連接至用於0;它可以根據需要進行推廣。]

+0

這滯後於我的整個PC它使用我的整個內存和CPU迫使我重新啓動PC! – Abanoub

+0

@MixedCoder,它不應該發生。我沒有在代碼中看到任何錯誤,我發佈了。字符串形成是否不正確。 – iammilind

相關問題