有关类定义与声明的问题。

mben 2003-09-11 07:00:59
我要定义两个类:类1和类2,其中类1中有成员函数以类2为参数类型,且类2中又有成员函数以类1为参数类型,类1又要以一个类2的成员函数为友员.......
我知道这样写程序有些不elegant,但我想知道能不能用定义与声明的方法解决
...全文
46 15 打赏 收藏 转发到动态 举报
写回复
用AI写文章
15 条回复
切换为时间正序
请发表友善的回复…
发表回复
wangyangcheng 2004-02-12
  • 打赏
  • 举报
回复
也就是說前置聲明后只其指針或引用?
dragonlw 2003-09-16
  • 打赏
  • 举报
回复
我来说说
你在前边仅仅声明一个类即:
class a;
但你不能够确定这个类的大小,编译器肯定不知道
你声明个引用或则指针这个可以!
具体的你可以参考 thinking in c++

但要声明个具体的对象,那就是行不通的了。
awant2k 2003-09-16
  • 打赏
  • 举报
回复
如果不用指针,编译器不知道引用类的大小和构造函数
goodluckyxl 2003-09-15
  • 打赏
  • 举报
回复
nmgpy(nmgpy) ( ) 信誉:100

要先声明class a ;否则出错

^&^
jp311 2003-09-14
  • 打赏
  • 举报
回复
我认为
在构造A object的时候必须确切的知道B object的size。只有声明没有定义编译器没能力确定B object的size(因为B对象也要知道A oject的size,其不可能在A对象size没有确定之前就决定自己的size,所以B class是不会在A class定义之前就定义成功的)。而指针就不同了,不管你object有多大,我指针size都是确切值,所以就不用担心A object的size不确定的问题了
mben 2003-09-14
  • 打赏
  • 举报
回复
to: jiangpeng(JP)
你说的方法到是可行,谢谢.但能说说为什么"只能用指针或引用。即使用前置声明B也没有办法直接使用B类型"么.
bestsmoke 2003-09-12
  • 打赏
  • 举报
回复
class A
{
private:
{
void Go(B *p);
}
public:
{
friend B::fn()
}
}
class B
{
private:
{
void fn(A *p);
}
}
jp311 2003-09-12
  • 打赏
  • 举报
回复
to wkkevin(傻子中的天才)
你有没有试过,就在那同意。
用个编译器试试下面的代码,再说是不是正确方法

class A;
class B;

class A {
friend class B;
public:
void f(B) {}; // 1.
};

class B {
public:
void f(A) {};
};
Yssss1980 2003-09-12
  • 打赏
  • 举报
回复
靠,写出这么烂的class

循环引用基本上都是可以避免

好好再次考虑你的类的设计
wkkevin 2003-09-12
  • 打赏
  • 举报
回复
回复人: robertnet(三极管) ( ) 信誉:100 2003-09-11 23:49:00 得分:0

可以用前置声明的方法来解决未定义的问题。
class a;
class b;

这是正确的方法。



robertnet 2003-09-11
  • 打赏
  • 举报
回复
可以用前置声明的方法来解决未定义的问题。
class a;
class b;
jp311 2003-09-11
  • 打赏
  • 举报
回复
class A {
friend class B;
public:
void f(B*) {}; // 1.
};

class B {
public:
void f(A) {};
};

1. 只能用指针或引用。即使用前置声明B也没有办法直接使用B类型
nmgpy 2003-09-11
  • 打赏
  • 举报
回复
在最上边少了class a;
class a;
class b
{
public:
static void bFun(a * a1){}
};
class a
{
public:
friend void b::bFun(a * a1);
void aFun(b b1){}
};
nmgpy 2003-09-11
  • 打赏
  • 举报
回复
class b
{
public:
static void bFun(a * a1){}
};
class a
{
public:
friend void b::bFun(a * a1);
void aFun(b b1){}
};
看看是否符合仁兄的要求
thrillers 2003-09-11
  • 打赏
  • 举报
回复
up

64,650

社区成员

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

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