付笑 发表于 2013-10-24 10:01:39

抄书的代码,通不过编译,求解

本帖最后由 付笑 于 2013-10-24 10:02 编辑


代码如下:
#include<iostream>
#include<string>
using namespace std;


//声明类Point
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 &output,const Point &p);//重载运算符"<<"

protected:
float x,y;
};

//下面定义Point类的成员函数
//Point的构造函数
Point::Point(float a,float b)
{
x=a;
y=b;
}
//设置x和y的坐标值
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;
}



int main()
{

return 0;
}
编译的时候错误如下:

error C2248: 'x' : cannot access protected member declared in class 'Point'
see declaration of 'x'
error C2248: 'y' : cannot access protected member declared in class 'Point'
: see declaration of 'y'

问题:类里面已经声明重载<<函数为友元了,编译的时候为什么还报这样的错啊

苹果沃珂 发表于 2013-10-24 10:13:08

看了程序,没发现什么问题,你项目清理一下看看

随风听雨雪 发表于 2013-10-24 11:17:19

应该没错误啊

付笑 发表于 2013-10-24 11:28:00

随风听雨雪 发表于 2013-10-24 11:17 static/image/common/back.gif
应该没错误啊

我用VC6.0编译报错啊,是不是编译器的问题啊

付笑 发表于 2013-10-24 11:28:52

苹果沃珂 发表于 2013-10-24 10:13 static/image/common/back.gif
看了程序,没发现什么问题,你项目清理一下看看

你用VC6.0能编译通过吗

peterboboo 发表于 2013-10-24 23:08:29

本帖最后由 peterboboo 于 2013-10-24 23:17 编辑

苹果沃珂 发表于 2013-10-24 10:13 static/image/common/back.gif
看了程序,没发现什么问题,你项目清理一下看看
#include<iostream>
#include<string>
using namespace std;

//声明类Point
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 &output,const Point &p);//重载运算符"<<"

protected:
float x,y;
};

//下面定义Point类的成员函数
//Point的构造函数
Point::Point(float a,float b)
{
x=a;
y=b;
}
//设置x和y的坐标值
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;
}
int main()
{
Point pt(200,300);
pt.setPoint(500,600);
cout<<pt<<endl;
return 0;
}

GCC、VC2010编译通过,也跑出结果了,没问题。怀疑你的代码忘记了friend关键字,把这个关键字去掉,可以得到和你一样的错误信息 'Point::x' : cannot access protected member declared in class 'Point‘


花开淡墨痕 发表于 2013-11-19 16:42:54

同上 楼上正解{:7_157:}

BoPo 发表于 2013-11-19 19:34:30

x,y 的访问权限 是 protected ,改成 public 就可以了

阔怀 发表于 2015-8-18 09:57:29

{:1_1:}
页: [1]
查看完整版本: 抄书的代码,通不过编译,求解