Outer.hpp :
class Outer {
class Inner {
Inner() {}
};
static Inner inner;
}
Outer.cpp (在顶层,例如不在函数体内):
Outer::Inner Outer::inner;
我收到以下错误:
error C2248: 'Outer::Inner::inner' : cannot access private member declared in class 'Outer::Inner'
我没有使用完全符合C ++ 11(Visual Studio 2010)的编译器,因此无法在声明时定义字段。
答案 0 :(得分:4)
诀窍是让Outer
成为Inner
的朋友:
Outer.hpp :
class Outer {
class Inner {
Inner() {}
friend Outer;
}
static Inner inner;
}
现在,Outer
可以看到Inner
的类型,即使在实现文件中它也不是私有的,因此 Outer.cpp 中的初始化成功。< / p>
答案 1 :(得分:1)
不,你不需要朋友。不好的主意。
class Inner 是类Outer 的私有成员。这没什么不对。
问题取决于您放置定义的位置。
Outer::Inner Outer::inner; // is fine in the global space.
int main()
{
Outer::Inner Outer::inner; // Fails because it's used as a local variable to function main.
}