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

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

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

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

或者

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

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

我试图向前声明 foo:

namespace X {
int bar(int);
...

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

回答

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

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

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

  namespace
  {
    int bar(int x) { return 2 * x; }
  } // namespace
} // X


以上是在匿名命名空间中引用前向声明的函数?的全部内容。
THE END
分享
二维码
< <上一篇
下一篇>>