使用anon。匿名函数在anon中。名称范围

时间:2013-11-01 22:46:33

标签: c++ namespaces linker-errors anonymous

我尝试这样做:

file.h

namespace {
   void fun();
   const bool nevermind = Register( fun );
}

file.cpp

namespace {
     void fun() {
        do_some_job();
     }
}

有链接错误。链接器找不到函数void fun()。

如果我尝试这样做:

file.h

namespace {
    void fun() {
         do_some_job();
    } 
    const bool nevermind = Register( fun );
}
一切顺利。

如何编译第一个案例?我不想在* .h文件中有函数定义。

1 个答案:

答案 0 :(得分:2)

匿名命名空间的目的是阻止您在其他任何地方使用该功能。因此,在标题中定义它没有什么意义。我假设每当你添加一个匿名命名空间时,编译器实际上将它视为具有乱码唯一名称的命名空间。因此,当您添加另一个匿名命名空间时,它不是同一个命名空间。

另请参阅下面的BoBTFish评论,澄清了这一点。