在匿名命名空间中引用前向声明的函数?

Jus*_*ler 0 c++

我正在尝试了解匿名命名空间。现在我的代码的要求是这样的:

#file.c
namespace X
{
  void foo(){int x = bar(2);}
} //X

namespace
{
  int bar(int x);
} //namespace
Run Code Online (Sandbox Code Playgroud)

或者

#file.c
namespace X
{
  void foo(){int x = bar(2);}

namespace
  {
    int bar(int x);
  } // namespace
} // X
Run Code Online (Sandbox Code Playgroud)

我试图向前声明 foo:

namespace X {
int bar(int);
...
Run Code Online (Sandbox Code Playgroud)

但到目前为止,这只会导致链接器错误。

Que*_*tin 5

匿名命名空间在每个翻译单元中是一致的,您可以像任何其他命名空间一样重新打开它:

namespace X
{
  namespace
  {
    int bar(int x);
  } // namespace

  void foo() { int x = bar(2); }

  namespace
  {
    int bar(int x) { return 2 * x; }
  } // namespace
} // X
Run Code Online (Sandbox Code Playgroud)