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

重載运算符问题,为啥有歧义

唐兵 发布于 2013-06-04 18:00, 789 次点击
#include <iostream>
using namespace std;
class Point
{
public:
    Point(int a,int b);
    friend ostream & operator<<(ostream &output,Point &p );
    void getxy();
public:
    int  x,y;
};
Point::Point(int a,int b)
    {
        x=a;
        y=b;
    }
void Point::getxy()
{
    cout<<"input x,y:"<<endl;
    cin>>x>>y;
}
class Circle:public Point
{
public:
    friend ostream & operator<<(ostream &output,Point &p );
    Circle(int a,int b,int r1);
    int area();
    void getr();
    int r;
};
Circle::Circle(int a,int b,int r1):Point(a,b),r(r1){}
void Circle::getr()
{
    cout<<"inpu r:"<<endl;
    cin>>r;
}
int Circle::area()
{
    return 3.14*r*r;
}
class Cyinder:public Circle
{
public:
    int h;
};
ostream & operator<<(ostream &output,Circle &C )
{
    output<<C.x<<endl<<C.y<<endl<<C.area()<<endl;
    return output;
}
ostream & operator<<(ostream &output,Point &p )
{
    output<<p.x<<endl<<p.y<<endl;
    return output;
}
int main()
{
    Point o(1,2);
    o.getxy();
    cout<<o;
    Circle c(1,2,3);
    c.getr();
    cout<<c;
    return 0;                  
}
5 回复
#2
唐兵2013-06-05 13:41
ostream & operator<<(ostream &output,Circle &C )
重载有歧义
#3
haoyasen2013-06-05 15:47
ostream & operator<<(ostream &output,Circle &C )
{
    output<<C.x<<endl<<C.y<<endl<<C.area()<<endl;
    return output;
}
ostream & operator<<(ostream &output,Point &p )
{
    output<<p.x<<endl<<p.y<<endl;
    return output;
}

函数参数个数和类型一样 和 返回函数类型一致你重新写 一个输出函数把
因为 Point 和Circle  你把& 去掉时下
#4
rjsp2013-06-05 16:14
回复 3楼 haoyasen
你用什么编译器?
#5
haoyasen2013-06-05 21:09
回复 2楼 唐兵
我运行你的代码 一个错误也没啊怎么我用的是VS 2012
#6
haoyasen2013-06-05 21:09
回复 4楼 rjsp
VS 2012
1