¿Qué le parece
holdBuff << getline(cin, stringIn);
está haciendo. El tipo de devolución de getline
es una referencia a la secuencia que se lee (cin
) en este caso. Como no hay <<
definida que toma un std::istream
como segundo argumento, el compilador intenta diferentes conversiones: en C++ 11, std::istream
tiene una conversión implícita a bool
, y en el anterior C++, una conversión implícita a std::ios*
o algo similar (pero el único uso válido del valor devuelto es convertirlo a bool
). Por lo tanto, obtendrá 1
(C++ 11) o alguna dirección aleatoria (en la práctica, generalmente la dirección de la transmisión, pero este no está garantizado).Si desea obtener los resultados de una llamada a getline
en un std::ostringstream
, necesita dos operaciones (con un cheque de errores entre ellos):
if (!getline(std::cin, stringIn))
// Error handling here...
holdBuff << stringIn;
Del mismo modo, para escribir el contenido de un std::ostringstream
,
std::cout << holdBuf.str() ;
es la solución correcta. Si usted insiste en el uso de un std::stringstream
cuando un std::ostringstream
sería más apropiado, también se puede hacer:
std::cout << holdBuf.rdbuf();
La primera solución es preferible, sin embargo, ya que es mucho más idiomática.
En cualquier caso, una vez más, no hay <<
operador que toma cualquier iostream
tipo, por lo que terminan con los resultados de la conversión implícita a bool
o un puntero.
Muchas gracias James. Buena información Tendré que buscar la diferencia entre ostringstream y stringstream. ¿Es esa la buena/forma de nivel de entrada para tirar de una línea de tipos posiblemente mixtos? Gracias. – MCP