2 ad hoc nw ad_hoc_NW 于 2016.01.18 20:03 提问

C++中类A和类B如何相互调用

类A中有函数FunA1()调用类B中函数FunB1();而类B中的函数FunB2()又调用了类A中函数FunA1();
如何才能实现这样的功能???谢谢!
在A.h和A.cc文件中实现先声明B,然后用B的指针:
class B //B的声明
class A()
{
public:
FunA1();
{
b->FunB1();
}
private:
B *b;
}
在B.h和B.cc文件想调用A中函数:
class B()
{
public:
FunB1();
{
}
FunB2();
{
//想在这块儿调用A的函数FunA1(),如何才能实现?
}
~~
~~
private:
~~~~~~
}

6个回答

li744831579
li744831579   2016.01.18 20:14
已采纳

这样写应该可以,你试试。
class A
{
public:
void FunA1(){}
void FuncA2(){}
void FunA3(){b->funb1();}
private:
class B *b;

};
class B()
{
public:
void funb1(){}
void funb2(){
a->FunAa();
}
private:
class A a;
};


qq_27183003
qq_27183003   Ds   Rxr 2016.01.18 22:43

以前做过测试,这种相互交叉使用,定义指针是可以的,定义对象不行。
例如:类A在B前定义

 class B;
 class A
 { public:
      B *pb;//合法
            B b;// 非法
}

class B
{
public:
  A a;//合法
    A *pa; //合法
};

caozhy
caozhy   Ds   Rxr 2016.01.18 20:08
 class B; //先申明
class A
{
    public: void fa(bool x=false) {
            B b;
                if (!x) b.fb();
        }
};
class B
{
    public: void fb() {
            A a;
                a.fa(true);
        }
};
int main()
{
A a;
a.fa();
}
caozhy
caozhy 回复ysuwood: 哦,好像是的。以前VC6是可以的
接近 2 年之前 回复
qq_27183003
qq_27183003 用vc2010编译通不过.
接近 2 年之前 回复
caozhy
caozhy 不是一个文件加上extern
接近 2 年之前 回复
caozhy
caozhy 回复夕阳_武士: 只要先申明就能用
接近 2 年之前 回复
ad_hoc_NW
ad_hoc_NW 调用两次。比如,我在类B的函数FunB1()中调用A类时,用的是指向A的指针;而现在我又要在类A中的函数FunA2()中调用B中函数,声明了一个指向B指针后不能用的。这应该怎么解决?非常感谢
接近 2 年之前 回复
caozhy
caozhy 回复夕阳_武士: 你想只调用1次?那么就是用函数指针执行回调。
接近 2 年之前 回复
ad_hoc_NW
ad_hoc_NW A:FunA1()——>B:FunB1()——>A:FunA2(),等于是两次调用不同的函数,怎么解决?
接近 2 年之前 回复
enpterexpress
enpterexpress   2016.01.18 20:46

在B类中声明A,调用方法a();
在A类中声明B,调用方法b();

John_ToStr
John_ToStr   Rxr 2016.01.20 14:02

如果只有前置声明的话,那么就不能用对象的细节

91program
91program   Ds   Rxr 2016.01.18 20:19

先声明,就是声明函数一样:在函数的实现前,使用函数头声明这个函数在后续定义。
类,也是一样的。先声明,可以防止编译出错。

Csdn user default icon
上传中...
上传图片
插入图片
准确详细的回答,更有利于被提问者采纳,从而获得C币。复制、灌水、广告等回答会被删除,是时候展现真正的技术了!