C++ header file management can be very frustrating:
- Changing the order of header files often results in difficult to track compilation errors
- C++ project compilations take a long time due to complex header file inclusions
Here are a few rules to remedy this:
- A header file should be included only when a forward declaration would not do the job.
- The header file should be so designed that the order of header file inclusion is not important.
- This is achieved by making sure that x.h is the first header file in x.cpp
- The header file inclusion mechanism should be tolerant to duplicate header file inclusions.
An example illustrates the header file inclusion rules:
// Forward Declarations
class A : public ABase
void SetC(C *c);
C *GetC() const;
void ModifyD(D *d);
void A::SetC(C* c)
m_c = c;
C* A::GetC() const
void A::ModifyD(D* d)
m_d = d;
For details, refer to C++ Header File Include Rules