如果我以明显的方式在 .h 中声明它:
namespace <named_namespace> {
namespace {
…
<type> <function>(<parameters>);
…
}
}
并将其实现放在。 cpp 中,将发生编译错误:
'<type> <named_namespace>::{anonymous}::<function>(<parameters>)' should have been declared inside <named_namespace>
如果不将函数的实现放在单个文件中,是否可以避免此错误?目前我使用关键字static
代替,但它会产生多次恼人的警告:
'<type> <named_namespace>::<function>(<parameters>)' declared 'static' but never defined
,正如我所理解的那样,只能通过将功能保存在单个文件(标题或来源)中来禁用。
欢迎使用交叉编译器解决方案(如果有的话)。
或者可能将头文件拆分为&#39; public&#39;和私人&#39;零件效率更高?
答案 0 :(得分:5)
您不能拥有适用于翻译单元的匿名命名空间,因此在.h
中放置匿名命名空间将无法正常工作。在每个翻译单元(.cpp
)中,该名称空间被分配了一个不同的唯一名称。
分离的声明和定义是可能的,但只能在该命名空间内:
namespace {
void func();
}
…
namespace {
void func()
{
…
}
}