error C2678: binario ‘! =’: no ​​se encontró ningún operador que tome un operando de la izquierda

template 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; } 

así que lo que quiero hacer es comenzar a leer desde ptrSeek start looping, agregar el valor a temp y verificar si el valor de temp! = 0 agregar este valor a tempReturn, y una vez que el valor de temp es 0, se interrumpe el ciclo y se devuelve tempReturnbut, pero me sigue dando este error

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

¿Cómo puedo resolver este problema aquí?

Hay un problema fundamental con el código de su plantilla si intenta comparar un tipo T arbitrario con la constante numérica 0, que está haciendo en el código aquí:

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

El problema aquí es que T es un tipo arbitrario (en este caso, parece que estás creando una instancia de la plantilla con std::string ), pero esperas que ese tipo sea comparable a 0. Esto está perfectamente bien, solo restringe T para ser tipos que pueden compararse con 0, pero debido al hecho de que está informando esto como un error, no estoy seguro de saberlo.

Sus opciones son no crear una instancia de esta plantilla con std::string como un argumento (la forma en que está escrita, no creo que se pueda hacer esto, ya que parece que la función sigue sumndo valores de algún tipo), o para depurar la plantilla y cambiar su comportamiento. No estoy muy seguro de lo que quiere que haga el código, por lo que en este último caso no estoy seguro de cómo puedo ayudar.

Espero que esto aclare las cosas!

Puede especializar o sobrecargar la parte de comparación ( != aquí != ) Para los tipos que no son directamente comparables a 0 . Solo un ejemplo,

 template 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)) ... 

[La función anterior está cableada para 0 ; Se puede generalizar según la necesidad.]