Что вы думаете
holdBuff << getline(cin, stringIn);
делает. Тип возврата getline
является ссылкой на поток
читается (cin
) в этом случае. Поскольку не определено <<
, которое
принимает std::istream
в качестве второго аргумента, компилятор пытается по-другому
преобразования: в C ++ 11 std::istream
имеет неявное преобразование в
bool
, а в более ранних версиях C ++ неявное преобразование в std::ios*
, или
что-то похожее (но единственное правильное использование возвращаемого значения
преобразовать его в bool
). Таким образом, вы либо выведите 1
(C ++ 11), либо
случайный адрес (на практике обычно это адрес потока, но этот
не гарантируется). Если вы хотите получить результаты звонка
getline
в std::ostringstream
, вам нужно две операции (с
проверьте наличие ошибок между ними):
if ( !getline( std::cin, stringIn ) )
// Error handling here...
holdBuff << stringIn;
Аналогично, для записи содержимого std::ostringstream
,
std::cout << holdBuf.str() ;
- правильное решение. Если вы настаиваете на использовании std::stringstream
когда std::ostringstream
будет более подходящим, вы также можете сделать:
std::cout << holdBuf.rdbuf();
Однако первое решение предпочтительнее, поскольку оно гораздо более идиоматично.
В любом случае, опять же, нет оператора <<
, который бы
iostream
типа, так что вы в конечном итоге с результатами неявного
преобразование в bool
или указатель.