在c ++草案标准中,我们在[class.nest]中有这个陈述:
2嵌套类的成员函数和静态数据成员可以在包含其类定义的命名空间范围内定义。 [实施例:
struct enclose { struct inner { static int x; void f(int i); }; }; int enclose::inner::x = 1; void enclose::inner::f(int i) { /* ... */ }
-end example]
我的困惑是,如果这是可能的,那么为什么不是following possible:
struct enclose {
struct inner {
void f(int i);
};
void inner::f(int i) {}
};
错误:无法在'enclose'中定义成员函数'enclose :: inner :: f' void inner :: f(int i){}
f
的定义是否位于包含inner
类定义的同一范围内?
如果没有,那么为什么不允许这样做?在类范围中定义此函数有什么问题?
答案 0 :(得分:2)
您引用的措辞说明可以在命名空间范围中定义。您试图在struct enclose
内定义它,这是类范围,而不是命名空间范围。