在匿名命名空间中引用前向声明的函数?
我正在尝试了解匿名命名空间。现在我的代码的要求是这样的:
#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