全局变量和枚举之间的范围问题

时间:2013-06-22 10:37:45

标签: c++ class scope

#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;
}

我们知道

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

3 个答案:

答案 0 :(得分:1)

对我来说它打印5,除非你在数组定义之前放置枚举。那就是3。

就像预期的那样(VS2012)。

答案 1 :(得分:0)

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

答案 2 :(得分:0)

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

相关问题