Почему локальная переменная типа "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()", который возвращает строку, содержащую копию содержимого буфера потока.

Так почему эти сообщения об ошибках? Нужно ли еще включить?

0 ответов

Другие вопросы по тегам