18

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?

jww
  • 97,681
  • 90
  • 411
  • 885
Monster
  • 1,573
  • 6
  • 23
  • 35

3 Answers3

24

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.

Diego Sevilla
  • 28,636
  • 4
  • 59
  • 87
6

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.

Oliver Charlesworth
  • 267,707
  • 33
  • 569
  • 680
5

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
  };
}
vitaut
  • 49,672
  • 25
  • 199
  • 336