在c++中一般的程序都会分成头文件和cpp文件,然后包含不同的头文件可以获得头文件中的函数的引用,
但是这里就会出现一个问题就是如果两个文件中同时包含了同一个头文件,例如 A.h中包含了C.h 然后在B.h中
也包含C.h 那么就会出现上述所提到的重复包含的情况。
所以在这里可以使用一个 # ifndef __A_H_ #define __A_H_ #endif
如下所示
// A.h
#ifndef _A_H_
#define _A_H_
class A
{
public:
static A& getTheApp();
void funA();
private:
static A* theApp;
};
#endif
// B.h
#ifndef _B_H_
#define _B_H_
class A;
class B
{
public:
void funB()
{
printf("B...\n");
A::getTheApp().funA();
}
void funB2();
};
#endif
但是我之前在写程序的时候遇到了这样的一种情况A包含了B的头文件B也还要包含A的头文件这样的情况,那么这样的话
对于编译器来说它需要把这两个头文件编译了这就是个问题了,那么如何解决这个问题呢也是通过一个预定义#pramgma once这样就能解决
但是注意的是在类定义之前需要加上对类的声明,比如下面在 Class A 之前需要有个 Class B
#pragma once
#include "B.h"
class B;
class A
{
public:
B* b;
};
//文件B.h中的代码
#pragma once
#include "A.h"
class A;
class B
{
public:
A* a;
};
所以一般的C++程序的规范是要求把头文件尽量写在cpp文件中这样可以避免上述的头文件相互包含的问题。
点击链接解锁更多内容