2013-06-22 3 views
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; 
} 

Как мы знаем, чтовопросов обзорных между глобальным переменным и перечислением

имена, определенные в любой момент в классе находятся в области видимости во всех функциях-членов класса. Таким образом, размер enum SIZE находится в области объема функции и скрывает глобальную переменную SIZE. , поэтому размер массива должен печатать 3 вместо 5, но когда я компилирую его, он показывается, что он не определен. Почему здесь происходит?

+0

Вы упомянули функцию foo, но в вашем коде нет такого. Прояснить? –

+1

Как вы хотите, чтобы массив был 3, если перечисление появилось после объявления? ЗАКАЗАТЬ ВОПРОСЫ –

+0

@JohnZwinck отредактирован !! – user2416871

ответ

1

Для меня он печатает 5, если вы не поместили перечисление перед определением массива. Тогда это 3.

Как и ожидалось (VS2012).

+0

Какой компилятор вы используете? – JeffRSon

+0

Я использую dev C++ моя ошибка [Ошибка] изменяет значение «SIZE» из «const int SIZE» [-fpermissive] – user2416871

+0

Ну, ошибка возникает из-за изменения SIZE * после того, как * он был использован. Если вы поместили enum перед массивом, ошибка исчезнет. Это ошибка для gcc (которую использует DevC++) для предотвращения таких неоднозначностей. – JeffRSon

0

Вы устанавливаете значение SIZE после того, как вы установили массив. Если вы хотите, чтобы массив был равен 3, вы должны поместить перечисление перед массивом.

0

Вы переопределяете РАЗМЕР, и, следовательно, ваш компилятор дает вам ошибку «изменения значения», которую вы упомянули в одном из своих комментариев.

Смежные вопросы