C++ ostream <<运算符重载 编译不通过

编译器为code::blocks
编译提示为:
|15|error: 'std::iostream& fuck::operator<<(std::iostream&, const fuck&)' must take exactly one argument|
||=== Build finished: 1 errors, 0 warnings ===|

#include<iostream>
using namespace std;
class fuck
{
int x;
public:
fuck(int x)
{
this->x=x;
}
friend iostream& operator<<(iostream & out,const fuck & f);
};
iostream& fuck::operator<<(iostream & out,const fuck & f)
{
return out<<f.x;
}
int main()
{

return 0;
}
大家把能编译通过的代码贴给我就可以了~

第1个回答  2013-04-06
外面operator的定义把fuck::去掉,因为它是fuck类的友元函数而不是成员函数。友元函数是公有函数。
iostream& operator<<(iostream & out,const fuck & f)
{
out<<f.x;
return out;
}本回答被提问者采纳
第2个回答  2013-04-06

如下:

#include <iostream>
using namespace std;
class fuck{
int x;
public:
fuck(int x){ this->x=x; }
friend ostream& operator<<(ostream & out,const fuck & f);
// ostream而不是iostrem
};
ostream& operator<<(ostream & out,const fuck & f)
{
out<<f.x;
return out;
}
int main()
{
fuck f(1);
cout << f;
return 0;
}

第3个回答  2013-04-06
好像是说 << 不能做成友元的重载,
只能是带一个参数的成员函数。

C++ << 运算符重载,导致无法解析的外部命令
ostream& operator << (ostream &out,const A<T> &x) { out << x.data1 << x.data2 << endl; \/\/ return out; \/\/ }

请教c++运算符重载程序报错原因
这可能是编译器的原因。有些低版本的编译器,除了在类中申明友元关系之外,还要在类定义前对函数进行前向声明。如:Class Time;Time& operator++(Time& a);Time operator++(Time& a,int);ostream& operator<<(ostream& o,const Time& t);如果你用的是vc6.0的话就会出现这种情况。虽然重载运算...

c++中运算符(\\" << \\")重载ostream&是什么意思
运算符重载,是对现有操作符使用于自定义用户类型的一种扩展,但具体的性质不能变,如<<表示流操作符左侧对象为流的本质不能变,+为两元操作符本质不能变,再如,对于->重载必须返回指针类型不可变!即,即使进行运算符重载,也只是有限自由!friend ostream & operator << (ostream &os, const CPo...

C++运算符重载,+-*\/的重载,返回值为什么是对象而不是对象的引用?而流操...
分析不能用引用的原因: 函数传入了两个参数a,b,并且+只能传入两个参数(c++不允许自己创造运算符),这样就限定了和sum不能作为参数传入,所以sum只能是一个函数里的临时变量,但是临时变量在函数结束时是要销毁的,那么函数调用玩,sum就没有了, 如果返回引用,引用源都已经没有了,还怎么引用,...

为什么C++操作符<<重载老是提示:operator <<' is ambiguous
<<和>>的重载必须作为类的友元函数,不能作为成员函数.所有应该在你的mycomplex类中,加上friend ostream& operator<<(ostream &os, mycomplex &second);的声明,然在在.cpp文件中实现该函数就可以了.

C++ <<重载问题!
\/\/把void换成ostream& };ostream& operator <<(ostream &x,Point pt) \/\/重载"<<"运算符的函数头 \/\/把void换成ostream& { x<<"("<<pt.px<<","<<pt.py<<")"<<endl; \/\/这里有错 return x;} void main(){ Point p1(1,2);cout<<p1;} 现在可以了 ...

C++重载运算符。 太TM难了。 进来看看
举例,假设你这个重载的<<不是友元,假设他的形式为ostream & operator <<(ostream &os){...},假设他是Date类的成员函数,则Date ma; ma<<cin; 语句ma<<cout会被自动转换为ma.operator<<(cin);的形式,注意:在这种转换方法中,最左边的对象是调用操作符成员函数的对象,也就是不能写成cout...

C++运算符重载:为什么流运算符不能重载为成员函数?
不能重载的根本原因在于,大部份的标准库实现中,对ostream,istream类体系采用了构造函数保护继承的方式。。。致使即使以继承的方式来扩展流类,也会在对象实例化时遭遇阻碍。。。另一方面,标准库中的流类,其插入符函数没有声明为虚函数,因此子类不能对其实现进行覆盖,所以也使成员函数重载遭遇到实质...

c++谭浩强的一段话怎么理解呢..我不懂它的前因后果
首先,运算符重载实质上是函数重载,比如operator+(int i)编译器解释为调用某类(假如stu)的成员函数stu.operator+(),所以要求第一个(左侧的)参数必须为该类的对象,否则没法调用成员函数 其次,运算符“>>”“<<”要求函数的第一个参数和函数的类型都必须是istream&和ostream&类型,这是因为要连续...

C++定义运算符重载后使用,提示没有与这些操作数匹配的运算符
使用cout为了不能改变类的属性,必须加const,把头文件和实现部分改为 friend ostream & operator<<(ostream & os,const 类名称 &co);

相似回答