C++ 我不知道';我不理解这个结果

C++ 我不知道';我不理解这个结果,c++,c++11,namespaces,lookup,C++,C++11,Namespaces,Lookup,这段代码没有在中编译 #包括 名称空间M{ B类{ 公共:静态常数int i=1000; }; } 名称空间N{ 类Y/*:公共M::B*/{ X类{ int a[i]; 静态常数int=1; 公众: X(){for(int j=0;j

这段代码没有在中编译

#包括
名称空间M{
B类{
公共:静态常数int i=1000;
};
}
名称空间N{
类Y/*:公共M::B*/{
X类{
int a[i];
静态常数int=1;
公众:
X(){for(int j=0;jstd::cout在带有注释基类的原始代码中,您试图使用尚未定义的namei

   class X {
        int a[i]; // here i is undefined
        static const int i = 1;
如果你愿意交换这两个定义

   class X {
        static const int i = 1;
        int a[i];
然后代码将被成功编译,因为我在数组定义中使用的是以前定义的

当基类未注释时,则在此定义中

        int a[i];
i是类B的静态数据成员,该类B是定义为

        int a[1000];

之后,您定义了类X的静态数据成员i,它在类X中隐藏了类Y的基类B的静态数据成员。

很明显,在注释掉的版本中,不允许声明
int a[i]
,因为尚未定义
i
。如果它确实编译,编译器将显示未定义的行为。请重命名您的问题,标题应建议实际问题。@Nemanjabric如果您愿意,请随意编辑它。
        int a[1000];