Classes and namespaces sharing the same name in C++


Keywords:c++ 


Question: 

Let's say I have a class called 'foo' in namespace "abc"...

namespace abc {
     class foo {
         int a;
         int b;
     };
}

...and then say I have another class called "abc" in a different namespace

#include "foo.h"

namespace foo {
    class abc {
        abc::a = 10;
    };
}

abc::a would not be a defined type, because it would be searching class abc, not namespace abc. How would I go about properlly referencing an object in another namespace, wherein that other namespace had the same name as the class I'm in?


3 Answers: 

You can use ::abc::xx, that is, identify the variable or type as its absolute namespace path. If you don't specify an absolute name, relative names start going upwards in the including namespaces/classes.



You can use a prefix :: to denote starting from the global namespace, so in your case ::abc would denote the abc namespace from your first code snippet.



You can specify a fully qualified name starting from :: which defines the global namespace, e.g.:

namespace abc {
   class foo {
       int a;
       int b;
   };
}

namespace foo {
  class abc {
      ::abc::foo a; // Changed from 'abc::a = 10;' since it doesn't compile
  };
}