#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:不明确的符号。
任何人都可以帮助我。
#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:不明确的符号。
任何人都可以帮助我。
您需要指定命名空间。前缀ostream
-std
即std::ostream
此外,您应该通过 const 引用将 obj 类型传递给运算符:
friend ostream& operator<<(ostream& stream, const obj& o);
你没有使用命名空间std(使用命名空间std是习惯)所以编译器不知道ostream到底是什么。除此之外,你实际上并没有定义operator<<,只是声明了它,所以即使如果它认出了它,它就不会知道该怎么做,因为你没有告诉它。
如我所见,您需要
添加
using std::ostream;
using std::ofstream;
;
在类声明之后添加最后你应该得到类似的东西:
#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();
}
ofstream
在命名空间中std
,所以你需要这样声明fout
:
std::ofstream fout("data.txt");
为简单起见,我假设您只是省略了 operator<< 函数的定义。显然,您需要编写该函数的主体以供下一行编译。
ostream 是 std:: 命名空间的成员,所以要么using namespace std;
在你的类声明之前放一个 a ,要么用std::ostream
.
考虑将您的对象作为引用传递,否则每次都会通过复制构造函数创建一个新的 obj 对象。
friend ostream& operator<<(ostream& stream, obj& o);