extern const
От: Аноним  
Дата: 04.09.07 09:32
Оценка:
в одном cpp Файле объявлена переменная
const int x = 10;

в другом я пытаюсь сослаться на нее
extern const int x;

и получаю ошибку линкера, что переменная не найдена.
почему так?
Re: extern const
От: jazzer Россия Skype: enerjazzer
Дата: 04.09.07 09:33
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в одном cpp Файле объявлена переменная

А>
extern const int x = 10;

А>в другом я пытаюсь сослаться на нее
А>
extern const int x;

А>и получаю ошибку линкера, что переменная не найдена.
А>почему так?
потмоу что extern надо ставить в обоих местах
jazzer (Skype: enerjazzer) Ночная тема для RSDN
Автор: jazzer
Дата: 26.11.09

You will always get what you always got
  If you always do  what you always did
Re: extern const
От: Bell Россия  
Дата: 04.09.07 09:40
Оценка:
Здравствуйте, Аноним, Вы писали:

А>в одном 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;
Любите книгу — источник знаний (с) М.Горький
Re: extern const
От: MasterZiv СССР  
Дата: 04.09.07 09:53
Оценка: +1
Аноним 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
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.