| 网站首页 | 业界新闻 | 小组 | 威客 | 人才 | 下载频道 | 博客 | 代码贴 | 在线编程 | 编程论坛
欢迎加入我们,一同切磋技术
用户名:   
 
密 码:  
共有 1008 人关注过本帖
标题:请教一个点运算符方面的报错。
只看楼主 加入收藏
yangfrancis
Rank: 16Rank: 16Rank: 16Rank: 16
等 级:贵宾
威 望:141
帖 子:1510
专家分:7661
注 册:2014-5-19
结帖率:100%
收藏
已结贴  问题点数:20 回复次数:14 
请教一个点运算符方面的报错。
#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
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
我猜的:
你的circle 类和point 类 貌似是平级类吧  那样的话 circle是无法调用point里的getx gety

DO IT YOURSELF !
2015-01-22 15:32
rjsp
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
等 级:版主
威 望:528
帖 子:9025
专家分:54030
注 册:2011-1-18
收藏
得分:6 
代码错误太多了,前面的不说,只说main函数之内的

Circle MyCircle(); 这是声明的一个函数,但函数的定义在哪儿呢?
(MyCircle().GetCenter).GetX 这又是什么?怀疑是 MyCircle().GetCenter().GetX()

如果 Circle MyCircle() 是写错了,本来想写的是 Circle MyCircle;
那 (MyCircle().GetCenter).GetX 也应该是 MyCircle.GetCenter().GetX()

从头看到尾,建议你换本书,这不是一两个小知识点的问题,而是类的设计就不是C++的味儿
2015-01-22 15:39
yang_guang_v
Rank: 1
等 级:新手上路
帖 子:2
专家分:0
注 册:2015-1-22
收藏
得分:0 
#include"stdio.h"
#define N 20
void ModEuler(float(*f)(float,float),float x0,float y0,float xn,int n)
{ int i;
float yp,yc ,x=x0,y=y0,h=(xn-x0)/n;
printf("x[0]=%f\ty[0]=%f\n",x,y);
for(i=1;i<=n;i++)
{
yp=y+h*(*f)(x,y);
x=x0+i*h;
yc=y+h*(*f)(x,yp);
y=(yp+yc)/2;
printf("x[%d]=%f\ty[%d]=%f\n",i,x,i,y);
}
}
float f(float x,float y)
{
return-x*x*y*y*y;
}
void main()
{
float xn=5,x0=0,y0=1;
ModEuler(f,x0,y0,xn,N);
}
请问怎么把这个程序的运行结果复制到文本文档?
2015-01-22 15:46
wp231957
Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20
来 自:神界
等 级:贵宾
威 望:423
帖 子:13688
专家分:53332
注 册:2012-10-18
收藏
得分:0 
这孩子,怎么跑人家的主贴下面来问问题了

DO IT YOURSELF !
2015-01-22 15:47
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
快速回复:请教一个点运算符方面的报错。
数据加载中...
 
   



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

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