в одном cpp Файле объявлена переменная
const int x = 10;
в другом я пытаюсь сослаться на нее
extern const int x;
и получаю ошибку линкера, что переменная не найдена.
почему так?
Здравствуйте, Аноним, Вы писали:
А>в одном cpp Файле объявлена переменная
А>extern const int x = 10;
А>в другом я пытаюсь сослаться на нее
А>extern const int x;
А>и получаю ошибку линкера, что переменная не найдена.
А>почему так?
потмоу что extern надо ставить в обоих местах
Здравствуйте, Аноним, Вы писали:
А>в одном cpp Файле объявлена переменная
А>const int x = 10;
А>в другом я пытаюсь сослаться на нее
А>extern const int x;
А>и получаю ошибку линкера, что переменная не найдена.
А>почему так?
Потому что константы имеют внутреннее связывание:
3.5/3
A name having namespace scope (3.3.5) has internal linkage if it is the name of
...
— an object or reference that is explicitly declared const and neither explicitly declared extern nor
previously declared to have external linkage;
...
Чтобу получить константу с внешним связыванием (то, что нужно тебе), нужно явно объявить ее как extern:
extern const int x = 10;
Аноним 893 пишет:
> в одном cpp Файле объявлена переменная
>
> const int x = 10;
>
>
> в другом я пытаюсь сослаться на нее
>
> extern const int x;
>
>
> и получаю ошибку линкера, что переменная не найдена.
> почему так?
такие переменные
const int x = 10;
неявно объявляются как static.
Чтобы они были не-static, надо явно задать extern.
Posted via RSDN NNTP Server 2.1 beta