Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 26.08.2009, 17:43   #1
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию Константы в заголовочных файлах.

Как использовать в заголовочных файлах объявленные в них же константы.
Там же, если их определить, то получается множественное определение.
А если не определить - получается array bound is not integer costant.

Последний раз редактировалось jojahti; 26.08.2009 в 17:45.
jojahti вне форума Ответить с цитированием
Старый 26.08.2009, 17:46   #2
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Цитата:
Сообщение от jojahti Посмотреть сообщение
Как использовать в заголовочных файлах объявленные в них же константы.
Там же, если их определить получается множественное определение.
А если не определить получается array bound is not integer costant.
Не много не понимаю проблемы. Константы какого типа ? Я лично использую не const int something = 5; а #define SOMETHING 5 мне кажется это более удобным.

Edit:
Если нужно использовать константу одну и туже в нескольких .cpp тогда лучше будет создать заголовочный файл типа MyConst.h и там прописать нужные вам константы, потом просто не в заголовочных файлах их описывать а уже в .cpp файлах.

Edit:
Ну, как я и сказал, для массива я лучше бы использовал #define MYARRAYSIZE 5 к примеру. С удовольствием услышал бы варианты и другие тоже.

Последний раз редактировалось BOBAH13; 26.08.2009 в 18:16.
BOBAH13 вне форума Ответить с цитированием
Старый 26.08.2009, 18:11   #3
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

BOBAH13
Цитата:
мне кажется это более удобным.
Нууу.. типо это слишком по сишному.

Тоесть вот такая штука:
//=== Файл заголовочный ===//

extern const int FY;

И вот если мне нужно заюзать в этом же файле мою константу для объявления массива?

//=== файл подключаемый ===//

const int FY=15;


//////////////////////////////////////////////////////////////////
Цитата:
тогда лучше будет создать заголовочный файл типа MyConst.h и там прописать нужные вам константы
Логично, но неужели для двух констант нужно городить лишние файлы?
jojahti вне форума Ответить с цитированием
Старый 27.08.2009, 03:16   #4
netrino
Участник клуба
 
Аватар для netrino
 
Регистрация: 15.07.2008
Сообщений: 1,933
По умолчанию

Вы ведь уже спрашивали про константы и я вам отвечал, что чтобы использовать константу в другом файле надо определять её как extern.
Код:
extern const int FY = 15
netrino вне форума Ответить с цитированием
Старый 27.08.2009, 08:26   #5
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

netrino
Цитата:
что чтобы использовать константу в другом файле надо определять её как extern.
То есть это одновременно является и определением? Ну я так собственно и сделал.

Вопрос как её теперь использовать не в другом, а в этом файле?

Т.к если константу заюзать, компилятор пишет array bound is not integer constant.

Последний раз редактировалось jojahti; 27.08.2009 в 08:29.
jojahti вне форума Ответить с цитированием
Старый 27.08.2009, 08:49   #6
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

добвь следущее в аголовчный файл. максоры должны быть написаны самыми первыми , и все будет работать.

Код:
#ifndef HeaderH
#define HeaderH

const int FY = 15;

#endif
lennon вне форума Ответить с цитированием
Старый 27.08.2009, 09:40   #7
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

1) Заголовочный файл связывает прогу с библиотекой.
2) Поэтому заинклуден он в двух местах.
3) Поэтому вот этого вот const int FY = 15; получается две штуки.
Как следствие двойное объявление и недовольный компилятор.

4)
#ifndef HeaderH
#define HeaderH
- Вот это вот предотвращает повторное случайное включение заголовочного файла куда-нибудь.

При чём тут моя константа?

P.S. Где не так поправьте плиз? Я нифига непонял.
jojahti вне форума Ответить с цитированием
Старый 27.08.2009, 09:56   #8
BOBAH13
Android Developer
Старожил Подтвердите свой е-майл
 
Аватар для BOBAH13
 
Регистрация: 19.02.2007
Сообщений: 3,708
По умолчанию

Смысл в том, что сначала #ifndef HeaderH если не включен этот заголовок то он включается #define HeaderH и больше никогда не будет включен в проект еще раз т.к. не даст #ifndef HeaderH. Соответственно и ваша константа будет объявлена только один раз.

Edit:
Цитата:
Будет обязательно.
Да извените, будет! Только вот секции начиная #ifndef HeaderH до #endif /* HeaderH */ не будет, или я не прав, или просто компилятор будет игнорировать макрос команды :D

Последний раз редактировалось BOBAH13; 27.08.2009 в 10:18.
BOBAH13 вне форума Ответить с цитированием
Старый 27.08.2009, 10:12   #9
jojahti
Подтвердите свой е-майл
 
Регистрация: 27.07.2009
Сообщений: 437
По умолчанию

BOBAH13
Цитата:
больше никогда не будет включен в проект еще раз
Будет обязательно.
jojahti вне форума Ответить с цитированием
Старый 27.08.2009, 11:26   #10
lennon
Заблокирован
 
Регистрация: 18.11.2007
Сообщений: 254
По умолчанию

ты бы проверил что тебе говорят. BOBAH13 объяснил для чего этот макрос.
lennon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Получить строковое значение константы в коде CaptainNemo Microsoft Office Word 2 09.06.2009 06:47
Константы массива (запятая и точка с запятой) IFRSoff Microsoft Office Excel 3 27.02.2009 18:11
Замена константы, переменной valerij Microsoft Office Excel 2 20.03.2008 21:16
Константы в Макросе valerij Microsoft Office Excel 2 03.02.2008 23:33
Имя константы-в строку Роман Радер Общие вопросы Delphi 2 04.07.2007 12:37