这是我的代码:
% 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()”,它返回一个包含流缓冲区内容副本的字符串。
那么为什么会出现这些错误信息呢?我需要另一个包含吗?