关于友元类的问题???

li3807 2003-03-08 01:37:54
class A
{
protected:
.....
};
class B
{
protected:
.....
static int Head;
static int Band;
};
int B::Head=0;
int B::Band=0;
是这样的我声明类A是类B的友元,但是我在类A中用到类B的静态数据成员Head和Band时,编译器出错,说Head和Band没有声明。
...全文
63 8 打赏 收藏 转发到动态 举报
写回复
用AI写文章
8 条回复
切换为时间正序
请发表友善的回复…
发表回复
FROM 2003-03-09
  • 打赏
  • 举报
回复
原理:每一个使用到的“名字”必须在此之前有声明。
fireseed 2003-03-09
  • 打赏
  • 举报
回复
在A类声明前加:

class B;
li3807 2003-03-09
  • 打赏
  • 举报
回复
把B和A的声明顺序反过来
那在A中的成员函数就可以用静态数据名来使用了吧。
langzi8818 2003-03-09
  • 打赏
  • 举报
回复
类A是类B的友元,表明A的成员函数可以访问B的保护或私有数据成员(当然包括public了!)
在申明friend的时候,需是public默认的是protected。#include "stdafx.h"
#include <iostream>
using namespace std;

class B
{
public:
friend class A;
protected:
static int Head;
static int Band;
};

class A
{
public:

static int Hd;
static int Bd;

void fn( B &b)
{
cout<<b.Band<<endl;
cout<<b.Head<<endl;
}
protected:
};

int B::Head=0;
int B::Band=0;
int A::Bd=4;
int A::Hd=4;

void main()
{

A a;
cout<<a.Bd<<endl;
cout<<a.Hd<<endl;

B b;
a.fn(b);


}

point_to 2003-03-09
  • 打赏
  • 举报
回复
类A是类B的友元,表明A的成员函数可以访问B的保护或私有数据成员(当然包括public了!)
在申明friend的时候,需是public默认的是protected。#include "stdafx.h"
#include <iostream>
using namespace std;

class B
{
public:
friend class A;
protected:
static int Head;
static int Band;
};

class A
{
public:

static int Hd;
static int Bd;

void fn( B &b)
{
cout<<b.Band<<endl;
cout<<b.Head<<endl;
}
protected:
};

int B::Head=0;
int B::Band=0;
int A::Bd=4;
int A::Hd=4;

void main()
{

A a;
cout<<a.Bd<<endl;
cout<<a.Hd<<endl;

B b;
a.fn(b);


}

HaiFen 2003-03-08
  • 打赏
  • 举报
回复
把B和A的声明顺序反过来
class B
{
friend class A;
...
};
class A
{
};
egxsguo 2003-03-08
  • 打赏
  • 举报
回复
因为类A是在类B之前声明的,编译器肯定不会知道类B中的静态数据了
joachern 2003-03-08
  • 打赏
  • 举报
回复
z注意区分类和实体的关系

69,371

社区成员

发帖
与我相关
我的任务
社区描述
C语言相关问题讨论
社区管理员
  • C语言
  • 花神庙码农
  • 架构师李肯
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

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