一个多文件的小程序,大家帮忙看看问题在哪?

傲世赢麻 2008-11-16 04:35:41
这个程序在只有point.h、point.cpp和main()中point部分时,可以通过编译。加入派生类circle的相关部分后就有问题了。

////////////////////////////////////point.h文件///////////////////////
#include<iostream>
using namespace std;

class Point
{public:
Point(float x=0,float y=0);
void setPoint(float,float);
float getX() const {return x;}
float getY() const {return y;}
friend ostream & operator << (ostream &,const Point &);
protected:
float x,y;
};
////////////////////////////////////point.cpp文件//////////////////////
#include"point.h"

Point::Point(float a,float b)
{x=a;y=b;}
void Point::setPoint(float a, float b)
{x=a;y=b;}
ostream & operator<<(ostream & output,const Point &p)
{output<<"["<<p.x<<","<<p.y<<"]"<<endl;
return output;
}
///////////////////////////////////circle.h文件/////////////////////////
#include<iostream>
#include"point.h"
using namespace std;

class Circle:public Point
{public:
Circle(float x=0,float y=0,float r=0);
void setRadius(float);
float getRadius()const;
float area()const;
friend ostream &operator<<(ostream &,const Circle &);
protected:
float radius;
};
////////////////////////////////////circle.cpp文件///////////////////////
#include"circle.h"

Circle::Circle(float a,float b,float r):Point(a,b),radius(r){}
void Circle::setRadius(float r)
{radius=r;}
float Circle::getRadius()const{return radius;}
float Circle::area()const
{return 3.14159*radius*radius;}
ostream &operator<<(ostream &output,const Circle &c)
{output<<"Center=["<<c.x<<","<<c.y<<"],r="<<c.radius<<",area="<<c.area()<<endl;
return output;}
//////////////////////////////////main.cpp文件//////////////////////////////
#include<iostream>
using namespace std;
#include"point.h"
#include"circle.h"

int main()
{///////////////////////point部分
Point p(3.5,6.4);
cout<<"x="<<p.getX()<<",y="<<p.getY()<<endl;
p.setPoint(8.5,6.8);
cout<<"p(new):"<<p<<endl;
////////////////////////circle部分
Circle c(3.5,6.4,5.2);
cout<<"original circle:\nx="<<c.getX()<<",y="<<c.getY()<<",r="<<c.getRadius()<<",area="<<c.area()<<endl;
c.setRadius(7.5);
c.setPoint(5,5);
cout<<"new circle:\n"<<c;
Point &pRef=c;
cout<<"pRef:"<<pRef<<endl;
return 0;
}
...全文
117 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
qqwx_1986 2008-11-16
  • 打赏
  • 举报
回复
宏定义规范的写法都是大写 一般性的_POINT_H_也可以多加几条下划线
傲世赢麻 2008-11-16
  • 打赏
  • 举报
回复
5楼给的方法可以通过,不过得把POINT_H换成小写
qqwx_1986 2008-11-16
  • 打赏
  • 举报
回复

#ifndef POINT_H
#define POINT_H
#include<iostream>
using namespace std;

class Point
{public:
Point(float x=0,float y=0);
void setPoint(float,float);
float getX() const {return x;}
float getY() const {return y;}
friend ostream & operator << (ostream &,const Point &);
protected:
float x,y;
};
#endif
傲世赢麻 2008-11-16
  • 打赏
  • 举报
回复
这是vc2005的出错提示,不过我看不出什么来,我想关键还是看上面的原程序。
1>------ Build started: Project: duotai, Configuration: Debug Win32 ------
1>Compiling...
1>main.cpp
1>e:\vs 2005\visual studio 2005\projects\duotai\duotai\point.h(5) : error C2011: 'Point' : 'class' type redefinition
1> e:\vs 2005\visual studio 2005\projects\duotai\duotai\point.h(5) : see declaration of 'Point'
1>e:\vs 2005\visual studio 2005\projects\duotai\duotai\circle.h(6) : error C2504: 'Point' : base class undefined
1>.\main.cpp(8) : error C2079: 'p' uses undefined class 'Point'
1>.\main.cpp(8) : error C2078: too many initializers
1>.\main.cpp(8) : warning C4244: 'initializing' : conversion from 'double' to 'int', possible loss of data
1>.\main.cpp(9) : error C2228: left of '.getX' must have class/struct/union
1> type is 'int'
1>.\main.cpp(9) : error C2228: left of '.getY' must have class/struct/union
1> type is 'int'
1>.\main.cpp(10) : error C2228: left of '.setPoint' must have class/struct/union
1> type is 'int'
1>.\main.cpp(13) : warning C4305: 'argument' : truncation from 'double' to 'float'
1>.\main.cpp(13) : warning C4305: 'argument' : truncation from 'double' to 'float'
1>.\main.cpp(14) : error C2039: 'getX' : is not a member of 'Circle'
1> e:\vs 2005\visual studio 2005\projects\duotai\duotai\circle.h(5) : see declaration of 'Circle'
1>.\main.cpp(14) : error C2039: 'getY' : is not a member of 'Circle'
1> e:\vs 2005\visual studio 2005\projects\duotai\duotai\circle.h(5) : see declaration of 'Circle'
1>.\main.cpp(16) : error C2039: 'setPoint' : is not a member of 'Circle'
1> e:\vs 2005\visual studio 2005\projects\duotai\duotai\circle.h(5) : see declaration of 'Circle'
1>.\main.cpp(18) : error C2440: 'initializing' : cannot convert from 'Circle' to 'Point &'
1>Build log was saved at "file://e:\vs 2005\Visual Studio 2005\Projects\duotai\duotai\Debug\BuildLog.htm"
1>duotai - 11 error(s), 3 warning(s)
========== Build: 0 succeeded, 1 failed, 0 up-to-date, 0 skipped ==========
Non_Recursive 2008-11-16
  • 打赏
  • 举报
回复
能否发一下错误提示?
傲世赢麻 2008-11-16
  • 打赏
  • 举报
回复
初学者,多包涵
jackzhhuang 2008-11-16
  • 打赏
  • 举报
回复
编码格式太有问题了,太难阅读了。

65,211

社区成员

发帖
与我相关
我的任务
社区描述
C++ 语言相关问题讨论,技术干货分享,前沿动态等
c++ 技术论坛(原bbs)
社区管理员
  • C++ 语言社区
  • encoderlee
  • paschen
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
  1. 请不要发布与C++技术无关的贴子
  2. 请不要发布与技术无关的招聘、广告的帖子
  3. 请尽可能的描述清楚你的问题,如果涉及到代码请尽可能的格式化一下

试试用AI创作助手写篇文章吧