运算符 << 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:不明确的符号。
任何人都可以帮助我。
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(6)
您需要指定名称空间。在
ostream
前面加上std
- 即std::ostream
另外,您应该通过 const 引用将 obj 类型传递给运算符:
You need to specify the namespace. Prefix
ostream
withstd
- i.e.std::ostream
Also, you should pass the obj type by const reference to the operator:
你没有使用命名空间std(反正使用命名空间std是习惯),所以编译器不知道ostream到底是什么。除此之外,你实际上没有定义operator<<,只是声明了它,所以即使它认识到了,它也不知道该怎么做,因为你没有告诉它。
You didn't use namespace std (using namespace std is habit anyway) so the compiler doesn't know what on earth an ostream is.In addition to that, you didn't actually define operator<<, only declared it, so even if it recognizes it, it won't know what to do since you didn't tell it.
据我所知,您需要
添加
使用 std::ostream;
using std::ofstream;
;
最后你应该得到类似的结果:
As I see it you need to
Add
using std::ostream;
using std::ofstream;
;
after the class declarationIn the end you should end up with something like:
ofstream
位于命名空间std
中,因此您需要像这样声明fout
:我假设您只是省略了运算符的定义<< ;函数为了简单起见。显然,您需要编写该函数的主体以便下一行进行编译。
ofstream
is in namespacestd
, so you need to declarefout
like this:I'll assume you simply omitted the definition of your operator<< function for simplicity. Obviously, you'll need to write the body of that function for your next line to compile.
ostream 是 std:: 命名空间的成员,因此可以在类声明之前放置
using namespace std;
,或者使用std::ostream
显式引用它。ostream is a member of the std:: namespace, so either put a
using namespace std;
before your class declaration or explicitly refer to it withstd::ostream
.考虑将对象作为引用传递,否则每次都会通过复制构造函数创建一个新的 obj 对象。
Consider passing your object in as a reference otherwise a new obj object will be created each time via the copy constructor.