Forward Declarations

Forward Declarations

There are circumstances in which classes refer to one another:

 //file: bank.hclass Report{public:void Output(const Account& account); // compile time error; class Account is not declared yet};class Account {public:void Show() {Report::Output(*this);}};

However, an attempt to compile this header file will cause compile time errors, since the compiler does not recognize the symbol Account as a class name when class Report is compiled. Even if we re-locate the declaration of class Account and place it before class Report, we’ll encounter the same problem: class Report is referred to from Account. For that purpose, forward declarations are required. A forward declaration instructs the compiler to hold off reporting errors until the entire source file has been fully scanned:

 //file: bank.hclass Acount; //forward declarationclass Report{public:void Output(const Account& account); //fine: Account is known to be a not-yet defined class};class Account {Report rep;public:void Show() {Report::Output(*this);}};


Share the Post: