Насколько я знаю, в C++ можно объявлять одно и то же имя несколько раз, если оно имеет один и тот же тип во всех этих объявлениях. Чтобы объявить объект типа int
, но НЕ определить его, используется ключевое слово extern
. Таким образом, следующее должно быть правильным и компилироваться без ошибок:
extern int x;
extern int x; // OK, still declares the same object with the same type.
int x = 5; // Definition (with initialization) and declaration in the same
// time, because every definition is also a declaration.
Но как только я переместил это внутрь функции, компилятор (GCC 4.3.4) жалуется, что я повторно объявляю x
и что это незаконно. Сообщение об ошибке следующее:
test.cc:9: error: declaration of 'int x'
test.cc:8: error: conflicts with previous declaration 'int x'
где int x = 5;
находится в строке 9, а extern int x
находится в строке 8.
Мой вопрос:
Если несколько объявлений не должны быть ошибками, то ПОЧЕМУ это ошибка в данном конкретном случае?