4

外部.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) 的编译器,因此无法在声明时定义该字段。

4

2 回答 2

4

诀窍是交Outer朋友Inner

外部.hpp

class Outer {
  class Inner {
    Inner() {}
    friend Outer;
  }
  static Inner inner;
}

现在,即使在实现文件中Outer也可以看到Inner's 的类型好像不是私有的,因此Outer.cpp中的初始化成功。

于 2013-03-18T12:53:13.420 回答
1

不,你不需要加好友。馊主意。

类 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.
}
于 2013-03-18T13:52:26.290 回答