自动需要的课程?

fsd*_*dfa 0 c++ class include guard

假设我有一个A类和一个B类.

A的.h需要B的.h,B的.h需要A.的A.h(需要= #include).

所有.h都有警卫:

#ifndef _classX_
#define _classX_
...
...
#endif
Run Code Online (Sandbox Code Playgroud)

但是如果我编译A的.cpp,那么当它包含B的.h时,B类不能包含A类的.h,因为A类已经使用了守护.

我怎么解决这个问题?

小智 5

您将需要其中一个类的前向声明.

// a.h
// do not #include b.h

class B;    // forward declaration

class A {
    ....
    B * b;
};
Run Code Online (Sandbox Code Playgroud)

请注意,类A不能包含实际的B实例 - 它必须是指针或引用.你也不能通过标题中的B指针调用任何函数 - 它们必须进入.cpp源文件,其中#includes两个标题.