Sko*_*ius 0 c++ namespaces private-members
标头看起来像这样:
namespace A {
class A {
private:
struct B {
int x;
};
B foo();
};
}
Run Code Online (Sandbox Code Playgroud)
我的.cpp看起来像这样
namespace A {
A::B A::foo() { //implement }
}
Run Code Online (Sandbox Code Playgroud)
我为什么不能这样做:
B A::foo() {//implement}
Run Code Online (Sandbox Code Playgroud)
如果B作用域位于A.h文件中,为什么A::B还要在cpp文件中使用?我们已经在A命名空间中就不必定义A::B?是否足够?我知道这B是私有的A,但是对于命名空间真的重要吗?
在到达A::foo函数定义之前,您将处于开始定义函数的范围之内。由于您不在类范围内,B因此不在范围内,并且会导致编译器错误。
您必须使用A::告诉编译器B的位置。到达目的地后,A::foo您将A再次处于范围之内,并且不需要它。您可以做的一件事是使用尾随返回类型将返回内容放入类范围
auto A::foo() -> B { ... }
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
59 次 |
| 最近记录: |