【发布时间】:2015-09-01 04:44:25
【问题描述】:
如果我以明显的方式在 .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
据我了解,只能通过将功能保存在单个文件(头文件或源文件)中来禁用它。
欢迎使用交叉编译器解决方案(如果有)。
或者也许将头文件分成“公共”和“私有”部分更有效?
【问题讨论】:
-
如果这个函数是私有的,为什么要把它放在头文件中?
-
为什么要在匿名命名空间中声明?正如编译器所说,它不应该是。你想完成什么?
-
未命名命名空间的目的是避免其他翻译单元的可见性,因此声明它是无稽之谈。看到这个问题:stackoverflow.com/questions/357404/…
-
这看起来像xy problem,你想做什么?将匿名命名空间放在头文件中几乎没有意义。对于静态函数也是如此。如果它只是定义并且只能从一个文件中使用,为什么要在多个文件中声明它?
-
好吧,我在 C++ 中缺乏静态类功能,所以我尝试通过命名空间来实现它。现在我发现这是不可能的。
标签: c++ function namespaces private