运算符<< 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是在地球上。除此之外,你没有实际定义运营商< <,只声明它,即使它承认它,它也不会知道该做什么,因为你没有告诉它。

+0

但为什么'暧昧'符号? – Chubsdad 2010-09-01 14:55:46

ofstream在命名空间std,所以你需要声明fout这样的:

std::ofstream fout("data.txt"); 

我会认为你只是忽略你的运营商< <功能简单的定义。显然,你需要为你的下一行编写该函数的主体。

您需要指定命名空间。 - 前缀ostreamstdstd::ostream

此外,你应该通过常量引用运营商通过obj类型:

friend ostream& operator<<(ostream& stream, const obj& o); 

ostream的是的std ::命名空间中的一员,所以要么把using namespace std;前您的班级声明或明确提及std::ostream

+0

'使用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);