devxlogo

Forward-Declaring a Namespace Member

Forward-Declaring a Namespace Member

Suppose you need to forward-declare class Interest, which is a member of namespace Bank. It would seem that all you need to do is use the class’s fully qualified name:

   class Bank::Interest;  // error  void Analyze(Bank::Interest& in);

Alas, the qualified name Bank::Interest will cause a compilation error since the compiler doesn’t know that ‘Bank’ is a namespace. Of course, #including the header file which declares class Bank::Interest will solve this problem but forward-declarations are used when you wish to avoid #including a header file. How do you correctly forward-declare a class that is a namespace member? The solution is simple: you need to open the class’s namespace, forward-declare the class in that namespace, and immediately close the namespace:

   namespace Bank  {    class Interest; /* fwd declaring class Interest,                           which is a member of namespace 'Bank' */  }  void Analyze(Bank::Interest& in);

The example above re-opens namespace Bank (which is defined in another source file already). It then forward-declares class Interest inside that namespace, and immediately closes that namespace. Remember that a forward-declaration is just a declaration, so it doesn’t cause any compilation or link “duplicate definition” errors.

devx-admin

Share the Post: