如果我以明显的方式在 .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
据我所知,只能通过将功能保留在单个文件( header 或源文件)中来禁用它。
欢迎使用交叉编译器解决方案(如果有的话)。
或者将头文件拆分为“公共(public)”部分和“私有(private)”部分可能更有效?
最佳答案
您不能拥有跨翻译单元工作的匿名命名空间,因此将匿名命名空间放在 .h
中将不会像您预期的那样工作。在每个翻译单元 (.cpp
) 中,该命名空间都分配了一个不同的唯一名称。
分离的声明和定义是可能的,但只能在该命名空间内:
namespace {
void func();
}
…
namespace {
void func()
{
…
}
}
关于C++:在匿名命名空间中声明函数原型(prototype)的正确方法是什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/30866325/