问个关于头文件的问题
Point.h的内容:
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;
}
Main.cpp的内容:
#include"Point.cpp"
#include<iostream>
int main()
{
Point p(3.5,6.4);
cout<<"x="<<p.getX()<<", y="<<p.getY()<<endl;
p.setPoint(8.5,6.8);
cout<<"p(new):"<<endl;
return 0;
}
三个文件在一个文件夹里,运行是出现了一堆错误,如下:
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2143: syntax error : missing ';' before '&'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2433: 'ostream' : 'friend' not permitted on data declarations
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2501: 'ostream' : missing storage-class or type specifiers
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2244: 'ostream' : unable to resolve function overload
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2061: syntax error : identifier 'ostream'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2501: '<<' : missing storage-class or type specifiers
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.h(14) : error C2805: binary 'operator <<' has too few parameters
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(12) : error C2143: syntax error : missing ';' before '&'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(12) : error C2501: 'ostream' : missing storage-class or type specifiers
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(12) : error C2061: syntax error : identifier 'ostream'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(13) : error C2501: '<<' : missing storage-class or type specifiers
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(13) : error C2809: 'operator <<' has no formal parameters
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(14) : error C2065: 'output' : undeclared identifier
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(14) : error C2297: '<<' : illegal, right operand has type 'char [2]'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(14) : error C2065: 'p' : undeclared identifier
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(14) : error C2228: left of '.x' must have class/struct/union type
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(14) : error C2228: left of '.y' must have class/struct/union type
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\point.cpp(14) : error C2065: 'endl' : undeclared identifier
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\main.cpp(6) : warning C4305: 'argument' : truncation from 'const double' to 'float'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\main.cpp(7) : error C2065: 'cout' : undeclared identifier
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\main.cpp(7) : error C2297: '<<' : illegal, right operand has type 'char [3]'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\main.cpp(8) : warning C4305: 'argument' : truncation from 'const double' to 'float'
c:\documents and settings\asus.asus-6c88744274\桌面\新建文件夹\main.cpp(9) : error C2297: '<<' : illegal, right operand has type 'char [8]'
执行 cl.exe 时出错.
该怎么改啊,高手指点下哈.
[解决办法]
Point.h的内容:
#include <iostream>
using namespace std;
class Point
{
public:
Point(double x=0,double y=0);
void setPoint(double,double);
float getX()const
{
return _x;
}
float getY()const
{
return _y;
}
friend ostream & operator<<(ostream &,const Point &);
protected:
double _x;
double _y;
};
Point::Point(double a,double b)
:_x(a),_y(b)
{
}
void Point::setPoint(double a,double b)
{
_x=a;
_y=b;
}
ostream & operator<<(ostream & output,const Point & p)
{
output <<"[" <<p.getX() <<"," <<p.getY() <<"]" <<endl;
return output;
}
Main.cpp的内容:
#include"Point.h"
int main()
{
Point p(3.5,6.4);
cout <<"x=" <<p.getX() <<", y=" <<p.getY() <<endl;
p.setPoint(8.5,6.8);
cout <<"p(new):" <<endl;
return 0;
}