0
#include <iostream>

const int SIZE = 5;

struct tester
{
    int array[SIZE];

    enum 
    {
        SIZE = 3
    };

    void size()
    {
        std::cout << sizeof(array) / sizeof(int);
    }
};

int main(int argc, char** argv)
{
    tester t;
    t.size();
    return 0;
}

据我们所知

在类中任何点定义的名称都在类的所有成员函数的范围内。因此enumSIZE 在函数大小的范围内并隐藏了全局变量 SIZE。所以我的数组大小应该打印 3 而不是 5,但是当我编译它时显示它是未定义的。为什么这里发生了什么?

4

3 回答 3

1

对我来说,它会打印 5,除非您将枚举放在数组定义之前。然后是3。

就像预期的那样(VS2012)。

于 2013-06-22T10:45:08.967 回答
0

设置数组后,您正在重置 SIZE。如果您希望数组为 3,则应将枚举放在数组之前。

于 2013-06-22T10:46:37.407 回答
0

您正在重新定义 SIZE,因此您的编译器会为您提供您在其中一条评论中提到的“更改含义”错误。

于 2013-06-22T11:11:34.233 回答