从命名空间访问映射

时间:2014-11-05 19:52:59

标签: c++ map namespaces

我在map.h头文件中有一个命名空间,并将map.cpp文件中的地图定义为

map.h

    namespace mymap{
     .....
   }

map.cpp

   namespace mymap{
     static const map<int, string> mymap{
          {0, "zero"},
          {1, "one"}....
     }
   }

我想在另一个名为summary.cpp的.cpp文件中访问此映射,如果我这样做,编译器会抛出错误mymap不是mymap的成员吗?

为什么会发生这种情况,如何在summary.cpp中访问该地图,我在summary.cpp中包含mymap.h并使用mymap :: mymap来访问它

1 个答案:

答案 0 :(得分:0)

  1. 在命名空间范围定义或声明中使用的关键字static使其成为translation-unit-local。
  2. 上述情况中的
  3. const也会暗示static,除非被extern覆盖。
  4. 如果您在翻译单元中没有先前的符号声明(如果未在该TU中定义,则它应该来自标题,该标题也包含在TU的第一个定义它的顺序中,按顺序排列检测不匹配),尝试使用它是一个错误。