注册 登录
编程论坛 C++教室

重载函数求助

逆水寒刘 发布于 2013-05-12 13:08, 1063 次点击
#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;
}
10 回复
#2
apull2013-05-12 14:48
friend ostream & operator<<(ostream&,Point&);定义不合适,最好加上count,错误原因是定义和下面的实现不一样。。
friend ostream& operator <<(ostream &,const Point &)

[ 本帖最后由 apull 于 2013-5-12 14:50 编辑 ]
#3
不要脸的猫2013-05-12 16:12
目测楼主用的编译器应该是VC++6.0!可将函数的定义(即函数体)放到类内试试!!!或换个编译器试试!
#4
逆水寒刘2013-05-12 19:16
回复 2楼 apull
还是不对呀
#5
apull2013-05-12 20:14
程序代码:
#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编译通过。

只有本站会员才能查看附件,请 登录
#6
邓士林2013-05-12 22:54
楼上的我中午在VC中没通过,我看了下书,这个和书中的例子没有太大差别,但是却编译不过去,我也没懂为什么
#7
kiadragon2013-05-13 00:24
你的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;
}
#8
逆水寒刘2013-05-13 12:55
回复 7楼 kiadragon
通过了,但是这样的话,重载输出函数的属性究竟是类里public 的,还是protected,这样用的意思是什么?
#9
逆水寒刘2013-05-13 12:56
回复 5楼 apull
我用的是VC++6.0,看来是编译器的问题,不过还是谢谢了!
#10
沉默和沟通2013-05-13 18:14
按照1楼的做就可以,VC6.0对新标准支持的不太好
#11
kiadragon2013-05-13 19:38
回复 8楼 逆水寒刘
都可以的,不过重载操作符是要用为 friend 友元 ,因为往往要访问自己的非公共成员(如private protected)
1