-1

私はそれをしようとします:

file.h

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

ファイル.cpp

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

リンクエラーがあります。関数 void fun() がリンカーによって検出されません。

私がそれをしようとすると:

file.h

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

すべてうまくいく。

最初のケースをどのようにコンパイルしますか? *.h ファイルに関数を定義したくありません。

4

1 に答える 1

2

匿名名前空間の目的は、その関数を他の場所で使用できないようにすることです。そのため、ヘッダーで定義する意味はほとんどありません。匿名の名前空間を追加するたびに、コンパイラは実際には意味不明な一意の名前を持つ名前空間として扱います。したがって、別の匿名名前空間を追加すると、それは同じ名前空間ではありません。

また、これを少し明確にする以下の BoBTFish によるコメントも参照してください。

于 2013-11-01T22:50:13.710 に答える