有遇到过这样的问题的吗?

傲世赢麻 2008-11-16 02:09:24
我有3个头文件,每个定义一个类,可以说是父类、子类、孙类,
另有3个源文件,分别定义3个类的成员函数和友元函数,还有一个源文件放main(),
编译的时候老对这行报错:
friend ostream & operator<<(ostream &,const Point &);
/*说是missing ';' before '&',这怎么会?
应该是别的什么原因呢?*/
...全文
118 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
  • 打赏
  • 举报
回复
using namespace std;
就呆在云上 2008-11-16
  • 打赏
  • 举报
回复
源文件point.cpp
里面带上头文件:
#include "cylinder.h"
应该就可以了
la_feng 2008-11-16
  • 打赏
  • 举报
回复
#include<iostream>
楼主是看漏了吧,这句后面应该有一句using namespace std;的如果你用#include<iostream.h>就不用了,具体两个的区别我也忘了,好像是版本升级改的,你百度下就知道了
傲世赢麻 2008-11-16
  • 打赏
  • 举报
回复
这就是所有的文件了,其实我是照书抄上的,可就是出错,自己也想不出改正的方法。
傲世赢麻 2008-11-16
  • 打赏
  • 举报
回复
源文件point.cpp

//POINT.CPP
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.cpp
//CIRCLE.CPP
#include <iostream>
#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;
}

源文件cylinder

//CYLINDER.CPP
Cylinder::Cylinder(float a,float b,float r,float h)
:Circle(a,b,r),height(h){}

void Cylinder::setHeight(float h){height=h;}

float Cylinder::getHeight() const {return height;}

float Cylinder::area() const
{ return 2*Circle::area()+2*3.14159*radius*height;}

float Cylinder::volume() const
{return Circle::area()*height;}

ostream &operator<<(ostream &output,const Cylinder& cy)
{output<<"Center=["<<cy.x<<","<<cy.y<<"], r="<<cy.radius<<", h="<<cy.height
<<"\narea="<<cy.area()<<", volume="<<cy.volume()<<endl;
return output;
}

源文件main()

#include <iostream>
using namespace std;
#include "stdafx.h"
#include "cylinder.h"
#include "point.cpp"
#include "circle.cpp"
#include "cylinder.cpp"
int main()
{Cylinder cy1(3.5,6.4,5.2,10);
cout<<"\noriginal cylinder:\nx="<<cy1.getX()<<", y="<<cy1.getY()<<", r="
<<cy1.getRadius()<<", h="<<cy1.getHeight()<<"\narea="<<cy1.area()
<<", volume="<<cy1.volume()<<endl;
cy1.setHeight(15);
cy1.setRadius(7.5);
cy1.setPoint(5,5);
cout<<"\nnew cylinder:\n"<<cy1;
Point &pRef=cy1;
cout<<"\npRef as a point:"<<pRef;
Circle &cRef=cy1;
cout<<"\ncRef as a Circle:"<<cRef;
return 0;
}
傲世赢麻 2008-11-16
  • 打赏
  • 举报
回复
包含了,我把所有的代码写上:
头文件point

//POINT.H
#include<iostream>

class Point
{public:
Point(float=0,float=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;
};

头文件circle

//CIRCLE.H
#include "point.h"
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;
};

头文件cylinder

//CYLINDER.H
#include "circle.h"
class Cylinder:public Circle
{public:
Cylinder (float x=0,float y=0,float r=0,float h=0);
void setHeight(float);
float getHeight() const;
float area() const;
float volume() const;
friend ostream& operator<<(ostream&,const Cylinder&);
protected:
float height;
};

  • 打赏
  • 举报
回复
没包含iostream头文件吧

65,211

社区成员

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

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