嵌套类

时间:2016-07-19 17:12:33

标签: c++

在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类定义的同一范围内?

如果没有,那么为什么不允许这样做?在类范围中定义此函数有什么问题?

1 个答案:

答案 0 :(得分:2)

您引用的措辞说明可以在命名空间范围中定义。您试图在struct enclose内定义它,这是类范围,而不是命名空间范围。