关于类之间相互调用的问题——一直没得到解决
例子:
//A.h文件
class A
{
public:
void fun()
{
B * p = new B();
............
}
}
//B.h文件
class B
{
public:
void fun()
{
A * p = new A();
...........
}
}
我的疑惑是,A类里调用了B类,而B类里调用了A类,这样可以吗?
出现这样的相互调用,有这必要吗?
[解决办法]
理论上应该是可以的,但是前提必须是在调用前包含类定义,但是这种用法没必要的,至少设计很糟糕,楼主的目的是干吗?
类定义的函数中当然可以new了.
[解决办法]
TO楼上:
其实这种设计是很普遍的,比如:两对象进行数据传递,最简单高效的方式莫过于此....
当然,小东西这样写可以,东西复杂了,还是改改得好,免得自己要晕...尤其是管理对象生存期的时候...
[解决办法]
没有定义,是不能使用对象的.但它的指针可以.
只要有类型的名字就可以使用它的指针了.
比如:
class A;
A * p;
class A {
.....
};
这样是可行的.相互包含的时候,通常就是这么写.
但如果使用这个对象(方法,成员),那就要先定义了.
[解决办法]
不可能吧,b类头文件里肯定包含了a类的类型声明,要不楼主把部分代码贴出来看看
[解决办法]
这样的设计确实很糟糕,过程耦合了,修改起来牵一发而动全身。完全可以分离出来,做成聚合,或者通过另一个中间体,做成异步等其它模式。
对象彼此调用,在一个线程的时候有死循环的可能。在多个线程时候,如果加了锁,就非常容易死锁,因为他们的调用已经形成了环路,具备了死锁的前提条件。
[解决办法]
谁说不可以,有多种方法:
1、放入stdafx.h中
2、用基类定义指针,强制转换。
3、定义为void* ,强制转换。
[解决办法]
设计很糟糕
[解决办法]
现在我不明白的是:A * p = anode; 这句话怎么会是正确的, B类里.h文件没有包含到A类
也没见在哪里声明了A类,就这么一句话,B类定义在A类之前,怎么还可以在B类里用到A类阿
-------------------------------------------------
C++ 编译器只是对cpp进行文件编译,所以上面那样用是可以的, 前提是在使用B类的CPP文件中要包含A类的头文件,而且要注意包含的顺序.
另:我也认为这种设计非常糟糕.
[解决办法]
应该没有问题. 因为使用之前,需要的是声明,而不是定义.
这是又分别的.
//b.h
class A....
class B{}
//a.h
class B...
class A{}
只要这种声明顺序,便可以了.
并且,我觉得也没有什么设计上的问题,B相对A来说是一个独立的类, A相对B来说也是一个独立的类.
如果一个类不能使用另一个独立的类,这又是什么设计.
只有该类存在一种非独立的关系的时候,才应该注意,比如继承关系,成员包含该类对象等.
[解决办法]
在类定义中使用指针类型,需要用到的类可以提前声明一下
class A;
class B
{
A* m_pA;
};
--------
class B;
class A
{
B* m_pB;
};