Что вы думаете
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
или указатель.
Большое спасибо Джеймсу. Отличная информация. Мне придется искать разницу между ostringstream и stringstream. Это хороший/начальный уровень, способный вытягивать линию возможных смешанных типов? Благодарю. – MCP