| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 747 人关注过本帖
标题:关于操作符重载的问题
只看楼主 加入收藏
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
 问题点数:0 回复次数:7 
关于操作符重载的问题
在重载时为什么用#include<iostream>头文件重载<<,>>,==操作符时  明明已经把重载函数申明位友元了,但是在重载函数定义时却不能调用私有成员?把头文件改成#include<iostream.h> 注释掉using namespace std;就可以了呢?  但是在用了#include<iostream.h>后string类又出问题了    请高手指点

#include<iostream>
using namespace std;


class C
{
public:
    C():x(0),y(1){}
    friend ostream &operator << (ostream &,const C &);
private:
    int x;
    int y;
};

ostream &operator << (ostream &out,const C &c1)
{
    out<<c1.x<<" "<<c1.y<<endl;
    return out;
}

int main()
{
    C cc;
    cout<<cc;
    return 0;
}


编译错误
:\program files\microsoft visual studio\myprojects\iostream\io.cpp(17) : error C2248: 'x' : cannot access private member declared in class 'C'
        g:\program files\microsoft visual studio\myprojects\iostream\io.cpp(11) : see declaration of 'x'
g:\program files\microsoft visual studio\myprojects\iostream\io.cpp(17) : error C2248: 'y' : cannot access private member declared in class 'C'
        g:\program files\microsoft visual studio\myprojects\iostream\io.cpp(12) : see declaration of 'y'
g:\program files\microsoft visual studio\myprojects\iostream\io.cpp(24) : error C2593: 'operator <<' is ambiguous


但是头文件改成#include<iostream.h>却可以呢
搜索更多相关主题的帖子: 操作符 重载 
2008-04-07 00:10
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
VC6的老问题,以前我也用过。
VC6对标准支持不好。。。。。。。。。。。。

i like linux...
2008-04-07 07:12
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
用命名空间隔开,避免污染...

学习需要安静。。海盗要重新来过。。
2008-04-07 10:09
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
得分:0 
win32平台不是都用VC6多嘛  真是麻烦哦  谁知道具体解决办法啊
2008-04-07 18:55
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
#include<iostream>
using namespace std;
namespace a{
class C
{
public:
    C():x(0),y(1){}
    friend ostream &operator << (ostream &,const C &);
private:
    int x;
    int y;
};

ostream &operator << (ostream &out,const C &c1)
{
    out<<c1.x<<" "<<c1.y<<endl;
    return out;
}
}

int main()
{
    a::C cc;
    cout<<cc;
    return 0;
}
收到的鲜花
  • yijing212008-04-08 12:12 送鲜花  2朵   附言:我很赞同

学习需要安静。。海盗要重新来过。。
2008-04-07 18:57
yijing21
Rank: 1
等 级:新手上路
帖 子:48
专家分:0
注 册:2007-11-7
收藏
得分:0 
楼上的可以解决  能说明下namespace a{}的作用嘛  谢谢
2008-04-08 12:12
sunkaidong
Rank: 4
来 自:南京师范大学
等 级:贵宾
威 望:12
帖 子:4496
专家分:141
注 册:2006-12-28
收藏
得分:0 
为了防止自己定义的运算符与std空间里面定义的运算符产生冲突,一般用命名空间隔开,这样就不用冲突了..c#里面命名空间也是这样的..还有java里面的包的概念

学习需要安静。。海盗要重新来过。。
2008-04-08 12:21
zjl138
Rank: 1
等 级:新手上路
威 望:1
帖 子:788
专家分:0
注 册:2007-11-12
收藏
得分:0 
[bo]以下是引用 [un]yijing21[/un] 在 2008-4-7 18:55 的发言:[/bo]

win32平台不是都用VC6多嘛  真是麻烦哦  谁知道具体解决办法啊

以现在来看,VC6是有点过时了,最新的VS2008也很好用的。不过编程之灵魂在于算法,至于工具,那就要看个人爱好,用着自已觉得舒服就行。

i like linux...
2008-04-08 13:00
快速回复:关于操作符重载的问题
数据加载中...
 
   



关于我们 | 广告合作 | 编程中国 | 清除Cookies | TOP | 手机版

编程中国 版权所有,并保留所有权利。
Powered by Discuz, Processed in 0.020109 second(s), 9 queries.
Copyright©2004-2024, BCCN.NET, All Rights Reserved