Насколько я знаю, в 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.
Мой вопрос: Если множественные объявления не должны быть ошибками, то ПОЧЕМУ это ошибка в данном конкретном случае?