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.