鱼C论坛

 找回密码
 立即注册
查看: 2080|回复: 8

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

[复制链接]
发表于 2013-10-24 10:01:39 | 显示全部楼层 |阅读模式
1鱼币
本帖最后由 付笑 于 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'

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

想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-24 10:13:08 | 显示全部楼层
看了程序,没发现什么问题,你项目清理一下看看
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-24 11:17:19 | 显示全部楼层
应该没错误啊
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-24 11:28:00 | 显示全部楼层
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

 楼主| 发表于 2013-10-24 11:28:52 | 显示全部楼层
苹果沃珂 发表于 2013-10-24 10:13
看了程序,没发现什么问题,你项目清理一下看看

你用VC6.0能编译通过吗
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-10-24 23:08:29 | 显示全部楼层
本帖最后由 peterboboo 于 2013-10-24 23:17 编辑
苹果沃珂 发表于 2013-10-24 10:13
看了程序,没发现什么问题,你项目清理一下看看

#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‘


想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-19 16:42:54 | 显示全部楼层
同上 楼上正解{:7_157:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2013-11-19 19:34:30 | 显示全部楼层
x,y 的访问权限 是 protected ,改成 public 就可以了
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

发表于 2015-8-18 09:57:29 | 显示全部楼层
{:1_1:}
想知道小甲鱼最近在做啥?请访问 -> ilovefishc.com
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

小黑屋|手机版|Archiver|鱼C工作室 ( 粤ICP备18085999号-1 | 粤公网安备 44051102000585号)

GMT+8, 2024-11-26 07:18

Powered by Discuz! X3.4

© 2001-2023 Discuz! Team.

快速回复 返回顶部 返回列表