| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1008 人关注过本帖
标题:请教一个点运算符方面的报错。
取消只看楼主 加入收藏
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:7 
请教一个点运算符方面的报错。
#include<iostream>
using namespace std;
class Point                   //定义点类,成员变量为平面内两个坐标值
{
public:
    void SetPos(int m, int n){x=m;y=n;}
    int GetX(){return x;}
    int GetY(){return y;}
private:
    int x; int y;
};
class Circle                  //定义圆形类,成员变量一为点类的圆心,一为整型的半径
{
public:
    Circle
    Circle(Point, double);
    Circle(int, int, double);
    ~Circle(){};
    void SetCenter(Point c){Center=c;}
    void SetRadius(double r){Radius=r;}
    Point GetCenter(){return Center;}
    double GetRadius(){return Radius;}
private:
    Point Center;
    double Radius;
};
Circle::Circle()
{
    Point p;p.SetPos(0,0);SetCenter(p);SetRadius(10);
}
Circle::Circle(Point c, double r)
{
    SetCenter(c);SetRadius(r);
}
Circle::Circle(int x=0, int y=0, double r=10)
{
    Point p;
    p.SetPos(x,y);
    SetCenter(p);
    SetRadius(r);
}
void main()
{
    Circle MyCircle();
    cout<<"圆的坐标:"<<(MyCircle().GetCenter).GetX<<endl;
//报错就在上面这行,说是error C2228: left of '.GetX' must have class/struct/union type
//执行 cl.exe 时出错.
}

为什么它不承认这里的(MyCircle().GetCenter)是一个Point类呢?我试了在GetX后加上()还是一样的报错。请各位老师帮忙看一看。谢谢。
搜索更多相关主题的帖子: private include public double return 
2015-01-22 15:15
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
我是想通过圆形类的公有成员函数得到圆心,再调用圆心所属的Point类的成员函数来输出圆心横坐标,但为什么会这样?
2015-01-22 15:19
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 3楼 wp231957
公有成员平级也不能调用啊?
2015-01-22 17:30
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 3楼 wp231957
Circle MyCircle()这句我自己也觉得很怪异,本来是用的Circle MyCircle,但又被报错说不知道该调用哪个构造函数。“ambiguous call to overloaded function”。加上括号之后,这句不报错,后面一句又报错了。
2015-01-22 17:35
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
回复 4楼 rjsp
Circle::Circle()
{
    Point p;p.SetPos(0,0);SetCenter(p);SetRadius(10);
}
这里算对前面声明的函数定义了么?(弱弱地问一句)
2015-01-22 17:45
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
Circle MyCircle();
cout<<"圆的坐标:"<<(MyCircle().GetCenter).GetX<<endl;
我刚才试过了,main函数的上面两句去掉,改为下面两句
Circle MyCircle(0,0,10);
cout<<"圆的坐标:"<<MyCircle.GetCenter().GetX()<<endl;
这样就不再报错了。但有一点还没明白,我前面已定义过了不带参的构造函数Circle(),为什么不能用Circle MyCircle呢?
(这上面贴出的代码声明构造函数时不小心弄掉了括号,但我实际写的代码确实加了括号的)
public:
   Circle();
是这样的。为什么建立对象时不允许我不写参数?
2015-01-22 17:54
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
Circle::Circle(int x=0, int y=0, double r=10)
我发现把这个构造函数里面的参数缺省值全部去掉之后,Circle MyCircle;就可以通过编译了。请问各位有没有人能说一下是怎么回事?本来是调用不带参的构造函数,但编译能不能通过又跟三个参数的构造函数相关,听起来好诡异啊。
2015-01-22 21:17
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
收藏
得分:0 
谢谢关注。不重载构造函数倒确实没问题。也许是因为先前我的第三个重载构造函数所有参数都给了缺省值,编译器认为这种情况和缺省掉参数是一样的,因此报错。
2015-01-24 13:16
快速回复:请教一个点运算符方面的报错。
数据加载中...
 
   



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

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