我在文件1中有类1,文件2中有类2。
如果不在类1中包含类2.h就不能在类1中声明类2的变量。
如果不在类2中包含类1.h就不能在类2中声明类1的变量。现在即要在类1中声明类2的变量,也要在类2中声明类1的变量,这样都包含就产生了无限递归包含了!怎么办?能不能有一种方法可以让我在整个项目中都不用包含就知道这个类的存在呢?
以前也应该有类似的文章吧,谢谢了。
如果不在类1中包含类2.h就不能在类1中声明类2的变量。
如果不在类2中包含类1.h就不能在类2中声明类1的变量。现在即要在类1中声明类2的变量,也要在类2中声明类1的变量,这样都包含就产生了无限递归包含了!怎么办?能不能有一种方法可以让我在整个项目中都不用包含就知道这个类的存在呢?
以前也应该有类似的文章吧,谢谢了。
{
B * m_pB;
};class B
{
A mA;
}关键有两点:其中的一个类需要提前声明(forward declaration);
被提前声明的类在其被具体定义之前只能声明该类的指针或引用,如上面class A定义中只能声明class B的指针(或引用)。
在类的定义结束(编译器在遇到类定义的右花括号之后),用该类来声明类实例对象,或对象指针,引用都是合法的。如上面的类B中定义类A的实例对象就是正确的,因为在此前类A的定义已结束.反之在A中声明B的对象实例就是错误的.
http://www.vckbase.com/bbs/prime/viewprime.asp?id=431
加分.
但是我的是文件问题呀,我也不知道那个文件被先调用,那个文件后被调用,而且这两个文件还是平等的.
帮我解决包含问题怎么做?
你不会让我到文件1中"class 类2"吧?我只是想用包含的方法.
class b;//提前说明a.cpp中
#include "b.h"b.h中
#include "a.h"
由于全局变量可以避免超前引用,不用赘述。我的习惯是,把类对象的extern语句加在该类头文件的最后,大家喜欢怎样写那都没有什么大问题,关键是保证不要在头文件中胡乱包含。
class c1{
c2 *m_p;
...
};file2:#include "file1"
class c2{
...
};这样就类重定义错误了。
#ifndef __file1_h__
//fiel1.h 的所有代码
.............
#define __file1_h__
#endif
____________________________________________________________//file2.h
#ifndef __file2_h__
//fiel2.h 的所有代码
.............
#define __file2_h__
#endif
____________________________________________________________//file1.cpp
#ifndef __file2_h__
#include "file2.h"
#endif
.............
_____________________________________________________________
//file2.cpp
#ifndef __file1_h__
#include "file1.h"
#endif
.............
_____________________________________________________________