-1

我尝试这样做:

文件.h

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

文件.cpp

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

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

如果我尝试这样做:

文件.h

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

一切顺利。

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

4

1 回答 1

2

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

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

于 2013-11-01T22:50:13.710 回答