标题:重载函数求助
只看楼主
逆水寒刘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:76
专家分:117
注 册:2013-3-27
结帖率:90%
已结贴  问题点数:20 回复次数:10 
重载函数求助
#include<iostream>
using namespace std;
class Point
{
public:
    Point(){ x=0; y=0;}
    Point(float a ,float b){ x=a; y=b;}
    float GetX()const{return x;}
    float GetY()const{return y;}
    float area(){return 0;}
    friend ostream & operator<<(ostream&,Point&);
protected:
    float x;
    float y;
};
ostream& operator <<(ostream &output,const Point &point)
{
    output<<"("<<point.x<<","<<point.y<<")"<<endl; //提示这里没有访问权限,不是申请唯有原函数了吗?不懂。求助解疑   
    return output;
}
int main()
{
    return 0;
}
搜索更多相关主题的帖子: namespace include public around 
2013-05-12 13:08
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:0 
friend ostream & operator<<(ostream&,Point&);定义不合适,最好加上count,错误原因是定义和下面的实现不一样。。
friend ostream& operator <<(ostream &,const Point &)

[ 本帖最后由 apull 于 2013-5-12 14:50 编辑 ]
2013-05-12 14:48
不要脸的猫
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:41
专家分:126
注 册:2012-6-20
得分:5 
目测楼主用的编译器应该是VC++6.0!可将函数的定义(即函数体)放到类内试试!!!或换个编译器试试!

埋骨何须桑梓地,人生无处不青山
2013-05-12 16:12
逆水寒刘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:76
专家分:117
注 册:2013-3-27
得分:0 
回复 2楼 apull
还是不对呀
2013-05-12 19:16
apull
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:三体星系
等 级:版主
威 望:185
帖 子:1404
专家分:8479
注 册:2010-3-16
得分:5 
程序代码:
#include<iostream>
using namespace std;
class Point
{
public:
    Point(){ x=0; y=0;}
    Point(float a ,float b){ x=a; y=b;}
    float GetX()const{return x;}
    float GetY()const{return y;}
    float area(){return 0;}
    friend ostream& operator <<(ostream &,const Point &);    //
protected:
    float x;
    float y;
};
ostream& operator <<(ostream &output,const Point &point)    //修饰符,类型等要和声明的一样。
{
    output<<"("<<point.x<<","<<point.y<<")"<<endl; //提示这里没有访问权限,不是申请唯有原函数了吗?不懂。求助解疑    
    return output;
}
int main()
{
    Point p(12,34);
    cout << p;
    return 0;
}


就修改了那一句。。gcc,bcc,vs2012编译通过。

2013-05-12 20:14
邓士林
Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19Rank: 19
来 自:淮河河畔
等 级:贵宾
威 望:61
帖 子:2391
专家分:13384
注 册:2013-3-3
得分:0 
楼上的我中午在VC中没通过,我看了下书,这个和书中的例子没有太大差别,但是却编译不过去,我也没懂为什么

Maybe
2013-05-12 22:54
kiadragon
Rank: 2
等 级:论坛游民
帖 子:20
专家分:24
注 册:2013-4-13
得分:10 
你的protected用的不对,外部不可以用protected的数据
改成这样
程序代码:
#include<iostream>
using namespace std;
class Point
{
public:
    Point(){ x=0; y=0;}
    Point(float a ,float b){ x=a; y=b;}
    float GetX()const{return x;}
    float GetY()const{return y;}
    float area(){return 0;}
    friend ostream & operator<<(ostream&,Point&);
protected:
friend ostream& operator <<(ostream &output,const Point &point)
{
    output<<"("<<point.x<<","<<point.y<<")"<<endl; //提示这里没有访问权限,不是申请唯有原函数了吗?不懂。求助解疑
    return output;
}
    float x;
    float y;
};

int main()
{
    return 0;
}
2013-05-13 00:24
逆水寒刘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:76
专家分:117
注 册:2013-3-27
得分:0 
回复 7楼 kiadragon
通过了,但是这样的话,重载输出函数的属性究竟是类里public 的,还是protected,这样用的意思是什么?
2013-05-13 12:55
逆水寒刘
Rank: 3Rank: 3
等 级:论坛游侠
威 望:2
帖 子:76
专家分:117
注 册:2013-3-27
得分:0 
回复 5楼 apull
我用的是VC++6.0,看来是编译器的问题,不过还是谢谢了!
2013-05-13 12:56
沉默和沟通
Rank: 1
等 级:新手上路
帖 子:1
专家分:0
注 册:2013-4-8
得分:0 
按照1楼的做就可以,VC6.0对新标准支持的不太好
2013-05-13 18:14



参与讨论请移步原网站贴子:https://bbs.bccn.net/thread-406879-1-1.html




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

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