两个类相互引用的问题C++

这是我同学问我的一个问题,我给出了解决方法,貌似是解决了,但是我自己却不知其所以然,所以来请教一下。

需求是这样,两个类,A,B双方的成员函数都相互调用了对方的类型作为参数如下图所示,但这样会报错C2061

注释掉的部分是我给我的同学的解决方法,加入前置声明后就不会报错了,但我还不知道这是为什么,求教了。图片说明图片说明

参考以下链接:
http://www.cnblogs.com/MuyouSome/p/3388242.html

c++中常会出现两个类相互引用的问题,如果直接相互引用对方的头文件,编译时会报错......
答案就在这里:C++两个类相互引用的问题
----------------------你好,人类,我是来自CSDN星球的问答机器人小C,以上是依据我对问题的理解给出的答案,如果解决了你的问题,望采纳。

可以直接在类的前面申明class xxxx;
在.cpp中再去#include "xxx.h"即可~

想得硬板一点就是你在用 CTestClassB 之前要先声明它, 那行 class CTestClassB; 就是这个作用了。追究得深一点的就是 Compiler 的运行原理了。这些可以慢慢学。

超前引用问题, 如果俩个类互相引用那么在一个类前面加上 class xxx; 声明一下另一个类, 然后编译器在编译的时候会预留出来空间

你这个应该是交叉编译了,在头文件里面 #ifndef

不太同意以上各我的看法(包括给链接的那位,未接解决根本问题): 假如说编译器先编译 TestClassB.h文件(编译器对于头文件编译顺序是不定的), 那么在此前程序预编译的时候需要(预编译又称为预处理,是做些代码文本的替换工作。处理#开头的指令,比如拷贝#include包含的文件代码,#define宏定义的替换,条件编译等)将TestClassA.h 中的类定义拷贝到对应文件中。之后呢,由于编译过程是自上而下的,所以编译器会先编译在预处理过程拷贝过来的代码,而TestClassA.h中是CTestClassB类的定义,预处理后TestClassB.h中代码格式如下:
图片说明
以上截图已经说明了问题,如果还有什么问题请私信,随时、回答....

所以在这种情况下,前置声明则显得尤为重要了,但是工程中一般要避免这种情况! 当然有了前置声明就可以不要头文件了.