Почему локальная переменная типа "ostringstream" получает сообщения об ошибках для вещей, которые должны быть действительными
Вот мой код:
% cat ch.cpp
using namespace std;
#include <string>
#include <iostream>
#include <sstream>
typedef const char* cstring;
class GameCharacter
{
private:
string desc;
string name;
string chid;
public:
GameCharacter(cstring nm, cstring id) :
chid(id), name(nm)
{
}
void setCharDesc(const char* d) { desc = d; }
string toString(void);
virtual void toString(ostream &strm);
};
string GameCharacter::toString(void)
{
ostringstream buf();
buf << "character: ID: " << chid << "name: " << name;
return buf.str();
}
================================================== =============
И вот результат компиляции:
% gcc ch.cpp
ch.cpp: In member function ‘std::string GameCharacter::toString()’:
ch.cpp:30:12: error: invalid operands of types ‘std::ostringstream() {aka std::basic_ostringstream<char>()}’ and ‘const char [16]’ to binary ‘operator<<’
buf << "character: ID: " << chid << "name: " << name;
^
ch.cpp:31:16: error: request for member ‘str’ in ‘buf’, which is of non-class type ‘std::ostringstream() {aka std::basic_ostringstream<char>()}’
return buf.str();
Я посмотрел это в справочнике библиотеки C++: http://www.cplusplus.com/reference/sstream/ostringstream/
Ссылка утверждает, что существует "перегрузка не члена":
ostream& operator<< (ostream& os, const char* s);
Он также утверждает, что у "ostringstream" есть открытый член "str()", который возвращает строку, содержащую копию содержимого буфера потока.
Так почему эти сообщения об ошибках? Нужно ли еще включить?