操作符 << 重载 出现报错

JeaminShe 2014-01-14 12:20:52
在网上找了找关于操作符重载的文章,自己折腾了半天,遇到<<重载时就出错了不知道为什么?
源程序如下:(自己建的类Jase)


#ifndef JASECLASS_H
#define JASECLASS_H
#include<iostream>
using std::cout;
using std::endl;

class Jase;
ostream& operator<<(ostream& out,Jase& a);

class Jase
{
public:
Jase(double _data = 0.0):data(_data){}
Jase& operator = (const Jase& rhs)
{
data = rhs.data;
return *this;
}
friend ostream& operator << (ostream& out,Jase& a);
private:
double data;
};

ostream& operator << (ostream& out,Jase& a)
{
out << a.data ;
return out;
}
#endif

报出的错误如下:

--------------------Configuration: Demo - Win32 Debug--------------------
Compiling...
Demo.cpp
i:\demo\jaseclass.h(8) : error C2143: syntax error : missing ';' before '&'
i:\demo\jaseclass.h(8) : error C2501: 'ostream' : missing storage-class or type specifiers
i:\demo\jaseclass.h(8) : error C2061: syntax error : identifier 'ostream'
i:\demo\jaseclass.h(8) : error C2501: '<<' : missing storage-class or type specifiers
i:\demo\jaseclass.h(8) : error C2809: 'operator <<' has no formal parameters
i:\demo\jaseclass.h(19) : error C2143: syntax error : missing ';' before '&'
i:\demo\jaseclass.h(19) : error C2433: 'ostream' : 'friend' not permitted on data declarations
i:\demo\jaseclass.h(19) : error C2501: 'ostream' : missing storage-class or type specifiers
i:\demo\jaseclass.h(19) : error C2244: 'ostream' : unable to resolve function overload
i:\demo\jaseclass.h(19) : error C2061: syntax error : identifier 'ostream'
i:\demo\jaseclass.h(19) : error C2501: '<<' : missing storage-class or type specifiers
i:\demo\jaseclass.h(19) : error C2805: binary 'operator <<' has too few parameters
i:\demo\jaseclass.h(24) : error C2143: syntax error : missing ';' before '&'
i:\demo\jaseclass.h(24) : error C2501: 'ostream' : missing storage-class or type specifiers
i:\demo\jaseclass.h(24) : error C2086: 'ostream' : redefinition
i:\demo\jaseclass.h(24) : error C2061: syntax error : identifier 'ostream'
i:\demo\jaseclass.h(25) : error C2501: '<<' : missing storage-class or type specifiers
i:\demo\jaseclass.h(25) : error C2809: 'operator <<' has no formal parameters
i:\demo\jaseclass.h(26) : error C2065: 'out' : undeclared identifier
i:\demo\jaseclass.h(26) : error C2065: 'a' : undeclared identifier
i:\demo\jaseclass.h(26) : error C2228: left of '.data' must have class/struct/union type
执行 cl.exe 时出错.
Demo.exe - 1 error(s), 0 warning(s)


我自己查了查没什么进展?报错指出的是
ostream& operator<<(ostream& out,Jase& a);

这行代码是一个全局函数的声明;就这个函数的写法就挺奇特,(对于我来说。)

这样的函数声明第一次见,想试试吧还出了Bug,无从着手调试啊!!请帮帮忙----
...全文
103 点赞 收藏 6
写回复
6 条回复
DevilAngel007 2014年01月14日
using std::ostream;
回复 点赞
derekrose 2014年01月14日
代码没错 已验证
回复 点赞
漫步者、 2014年01月14日
ostream& ou ostream是在std中,需要std::ostream
回复 点赞
JeaminShe 2014年01月14日
回复 1# 请问你用的什么编译器,把源代码放上直接就成功了? 回复 2# 和4# 添加using std::ostream;我的程序测试成功了!赞 回复 3# 你这个LS+1表达的是什么意思?
回复 点赞
哈利_蜘蛛侠 2014年01月14日
2楼给力!就是这样子!
回复 点赞
vipcxj 2014年01月14日
LS+1
回复 点赞
发动态
发帖子
C++ 语言
创建于2007-09-28

3.1w+

社区成员

24.8w+

社区内容

C++ 语言相关问题讨论,技术干货分享
社区公告
暂无公告