运算符<< C++中的超载
#include <iostream>
#include <fstream>
class obj
{
public:
int i;
friend ostream& operator<<(ostream& stream, obj o);
}
void main()
{
obj o;
ofstream fout("data.txt");
fout<<o;
fout.close();
}
这是我的代码,正在出错。 错误:ostream:含糊不清的符号。运算符<< C++中的超载
任何人都可以帮助我。
你没有使用命名空间标准(使用命名空间标准是习惯无论如何),所以编译器不知道什么是一个ostream是在地球上。除此之外,你没有实际定义运营商< <,只声明它,即使它承认它,它也不会知道该做什么,因为你没有告诉它。
ofstream
在命名空间std
,所以你需要声明fout
这样的:
std::ofstream fout("data.txt");
我会认为你只是忽略你的运营商< <功能简单的定义。显然,你需要为你的下一行编写该函数的主体。
您需要指定命名空间。 - 前缀ostream
与std
即std::ostream
此外,你应该通过常量引用运营商通过obj类型:
friend ostream& operator<<(ostream& stream, const obj& o);
ostream的是的std ::命名空间中的一员,所以要么把using namespace std;
前您的班级声明或明确提及std::ostream
。
'使用std :: ostream;'是另一种可能性。 – 2010-09-01 13:27:12
当我看到它,你需要
-
添加
using std::ostream;
using std::ofstream;
- 添加
;
类声明 - Povide为< <运营商实现了。
你到底应该结束了,像这样:
#include <iostream>
#include <fstream>
using std::ostream;
using std::ofstream;
class obj
{
public:
int i;
friend ostream& operator<<(ostream& stream, const obj& o);
};
ostream& operator<<(ostream& stream, const obj& o)
{
std::cout << o.i;
return stream;
}
int main()
{
obj o;
ofstream fout("data.txt");
fout << o;
fout.close();
}
考虑通过你的对象中另有一个新的obj对象将通过拷贝构造函数每次创建一个参考。
friend ostream& operator<<(ostream& stream, obj& o);
但为什么'暧昧'符号? – Chubsdad 2010-09-01 14:55:46