0

这是我的代码:

% 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()”,它返回一个包含流缓冲区内容副本的字符串。

那么为什么会出现这些错误信息呢?我需要另一个包含吗?

4

0 回答 0