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