两个类中头文件互相包含的问题怎么解决?

时间:2020-11-29 16:46:11
        VC++中,A类和B类互相使用对方类中定义的变量,比如
A类中有个变量a,如果在B类中用到了a,则需要在头文件中定义CA m_xx,然后在B类中添加A.h即A的头文件,通过m_xx.a来实现;同样B类中有个变量b,如果在A类中用到了b,则需要在头文件中定义CB m_yy,然后在A类中添加B.h即B的头文件,通过m_yy.b来实现。。。
这样编译就出现了错误“error C2146: 语法错误: 缺少“;”(在标识符“m_xx”的前面)
                                         error C4430: 缺少类型说明符 - 假定为 int。注意: C++ 不支持默认 int” 
  应该是头文件互相包含的问题,但是不可避免要互相使用对方类中定义的变量。。怎么解决这种问题呢??

11 个解决方案

#1


不同类中变量,请使用不同的变量名来定义。。

#2


使用 前置声明(Forward Declarations)来解决

#3


你可以把两个头文件都用到的公共定义在另建一个头文件放进去,
然后让这两个头文件做到相互不包含

#4


引用 2 楼 wshcdr 的回复:
使用 前置声明(Forward Declarations)来解决
能不能具体说下   我试了不行 
          而且我这里A类其实是CView类,B类的cpp中还有Doc的头文件,我知道在B类cpp中写头文件是Doc的要写在View的前面,所以,如果B类的头文件中包含A类的头文件也就是View的头文件,这个地方也会出现问题

#5


可以参考前置声明
前置声明 的作用就是这个

#6


在CA类的头文件中:

class CB;//添加这行代码
class CA
{
     //这是你的CA类头文件内容
};

CA类的cpp文件中
#include "B.h"

在CB类头文件中,同上相应的搞上 class CA
CB的cpp中 #include "A.h"

#7


在包含的类的头文件中这样加:
class 被调用的类名;

#8


使用了类似3楼的做法

#9


引用 8 楼 cr945211 的回复:
使用了类似3楼的做法


我给的方法也是对的,一分不给,⊙﹏⊙b汗 两个类中头文件互相包含的问题怎么解决?

#10


6楼才是对的,这个方法高明!

#11


引用 6 楼 thomtadie 的回复:
在CA类的头文件中:

class CB;//添加这行代码
class CA
{
     //这是你的CA类头文件内容
};

CA类的cpp文件中
#include "B.h"

在CB类头文件中,同上相应的搞上 class CA
CB的cpp中 #include "A.h"


请问这是什么原理啊 ?  好神奇

#1


不同类中变量,请使用不同的变量名来定义。。

#2


使用 前置声明(Forward Declarations)来解决

#3


你可以把两个头文件都用到的公共定义在另建一个头文件放进去,
然后让这两个头文件做到相互不包含

#4


引用 2 楼 wshcdr 的回复:
使用 前置声明(Forward Declarations)来解决
能不能具体说下   我试了不行 
          而且我这里A类其实是CView类,B类的cpp中还有Doc的头文件,我知道在B类cpp中写头文件是Doc的要写在View的前面,所以,如果B类的头文件中包含A类的头文件也就是View的头文件,这个地方也会出现问题

#5


可以参考前置声明
前置声明 的作用就是这个

#6


在CA类的头文件中:

class CB;//添加这行代码
class CA
{
     //这是你的CA类头文件内容
};

CA类的cpp文件中
#include "B.h"

在CB类头文件中,同上相应的搞上 class CA
CB的cpp中 #include "A.h"

#7


在包含的类的头文件中这样加:
class 被调用的类名;

#8


使用了类似3楼的做法

#9


引用 8 楼 cr945211 的回复:
使用了类似3楼的做法


我给的方法也是对的,一分不给,⊙﹏⊙b汗 两个类中头文件互相包含的问题怎么解决?

#10


6楼才是对的,这个方法高明!

#11


引用 6 楼 thomtadie 的回复:
在CA类的头文件中:

class CB;//添加这行代码
class CA
{
     //这是你的CA类头文件内容
};

CA类的cpp文件中
#include "B.h"

在CB类头文件中,同上相应的搞上 class CA
CB的cpp中 #include "A.h"


请问这是什么原理啊 ?  好神奇