class A和class B之间的函数相互调用????

titicacahang 2005-02-25 01:16:33
class A;中# include "B.h"
clsaa B;中# include "A.h"
在class A中有函数Aaa();
在class B中有函数Bbb();
在A.h里声明B的对象 B bina;
然后在A.cpp里调用bina.Bbb();

在B.h里声明A的对象 A ainb;
然后在B.cpp里调用ainb.Aaa();
但是就是会出错误。

但当我只有其中一个时
class A;中# include "B.h"
在A.h里声明B的对象 B bina;
然后在A.cpp里调用bina.Bbb();
就正确了。

别人说,是因为二个类之间 ,不能相互include
但我现在要在class A中调用class B的Bbb(),在class B中调用class A的Aaa(),请问应该怎么解决呀。。谢谢各位的帮忙呀。。急死人了。。。。
...全文
363 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
titicacahang 2005-02-25
  • 打赏
  • 举报
回复
好象A和B,都要 A * a ;同时 B * b;
如果只是其中一个的话,还是会出现错误的。??我刚刚试了下,,谢谢大家呀。
titicacahang 2005-02-25
  • 打赏
  • 举报
回复
kevin_wang(砸锅卖铁) 的意思是只要在B中用一个指针 B* bina;就行,,A的话A ainb; 或是A * ainb;都无所谓吗?
无聊客 2005-02-25
  • 打赏
  • 举报
回复
是要用指针,,晕倒,,,
healer_kx 2005-02-25
  • 打赏
  • 举报
回复
哪有这些问题啊?

晕死,头文件保护, 用声明, 用指针, 尽量不是.h文件里包含其他的头文件都可能是需要的。
同桌老王 2005-02-25
  • 打赏
  • 举报
回复
可以先声明一下Class B,然后再用,
但是这个时候编译器并不知道B占用多大的空间,所以用B b,是不行的.
如果用B*b就可以了,因为指针大小是DWORD的
titicacahang 2005-02-25
  • 打赏
  • 举报
回复
我试了一下。
。好象一定要用, 指针形式的, 即ndy_w(carpe diem)的形式,
如果用 yzx0023(无聊客) 的形式的话,仍有报错信息。
同时谢谢 pinel()
pinel 2005-02-25
  • 打赏
  • 举报
回复
在调用其它类的方法时应该能知道它的所有信息,但是使用指针可以在运行时解析。所以在头文件类声明前先预声明另一个类。然后不能在声明中调用方法,而且声明对象只能用对象指针(cpp中都可以)。大概是这样吧。
titicacahang 2005-02-25
  • 打赏
  • 举报
回复
刚刚试了共享头文件C.h的方法(有一个大大告诉我的),结果还是不行的。
我去试试yzx0023(无聊客) ndy_w(carpe diem) 的方法啦。
titicacahang 2005-02-25
  • 打赏
  • 举报
回复
谢谢
flyelf(空谷清音)
hooligan(风)
yzx0023(无聊客)
特别是 yzx0023(无聊客) 我马上去试试看,,

flyelf的方法。。是不是就是把A.h和B.h都放入到一个共享的头文件C.h里呀。??
C.h的话,是在去建一个class C呢,还是直接就建一个C.h这个文件??
ndy_w 2005-02-25
  • 打赏
  • 举报
回复
在A.h里声明B的对象 B bina;
? 声明?定义?bina是class A的成员吗?ainb呢?
如果是,不能实现。A和B互相包含,谁大?
如果不是,干嘛在头文件里?
一般用指针。如:

A.h
class B;
class A
{
B* bina;
void AFunc()
{
bina->Bbb();
}
};

B.h
class A;
class B
{
A* ainb;
};
无聊客 2005-02-25
  • 打赏
  • 举报
回复
A.h:
class B;
class A
{
B m_B;
...
};

A.cpp: //注意头文件包含顺序
#include "B.h"
#include "A.h"
.....


B.h:
class A;
class B
{
A m_A;
....
};

B.cpp: //注意头文件包含顺序
#include "A.h"
#include "B.h"
...
hooligan 2005-02-25
  • 打赏
  • 举报
回复
在Class A的声明前加上:
Class B;

B也一样可以。
flyelf 2005-02-25
  • 打赏
  • 举报
回复
放在一个头文件中声明

16,472

社区成员

发帖
与我相关
我的任务
社区描述
VC/MFC相关问题讨论
社区管理员
  • 基础类社区
  • Web++
  • encoderlee
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

        VC/MFC社区版块或许是CSDN最“古老”的版块了,记忆之中,与CSDN的年龄几乎差不多。随着时间的推移,MFC技术渐渐的偏离了开发主流,若干年之后的今天,当我们面对着微软的这个经典之笔,内心充满着敬意,那些曾经的记忆,可以说代表着二十年前曾经的辉煌……
        向经典致敬,或许是老一代程序员内心里面难以释怀的感受。互联网大行其道的今天,我们期待着MFC技术能够恢复其曾经的辉煌,或许这个期待会永远成为一种“梦想”,或许一切皆有可能……
        我们希望这个版块可以很好的适配Web时代,期待更好的互联网技术能够使得MFC技术框架得以重现活力,……

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