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.

See also  Is Machine Learning Automating Creativity in Graphic Design?
devxblackblue

About Our Editorial Process

At DevX, we’re dedicated to tech entrepreneurship. Our team closely follows industry shifts, new products, AI breakthroughs, technology trends, and funding announcements. Articles undergo thorough editing to ensure accuracy and clarity, reflecting DevX’s style and supporting entrepreneurs in the tech sphere.

See our full editorial policy.

About Our Journalist