Форум программистов, компьютерный форум CyberForum.ru

Перечислимые типы в разных файлах проекта - C++

Восстановить пароль Регистрация
 
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
05.11.2013, 14:34     Перечислимые типы в разных файлах проекта #1
Написал прогу:
1.срр - основной файл
2.h - файл с объявлениями функций
2.срр - файл с описанием функций

я создаю перечислимый тип
C++
1
enum x {...};
и использую его в некоторых функциях.

как мне сделать этот тип подступным во всех файлах?? если я добавлю в каждый файл строку
C++
1
enum x {...};
будет ошибка компиляции-множественное объявление.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
05.11.2013, 14:52     Перечислимые типы в разных файлах проекта #2
Перенеси его в заголовочный файл.
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
07.11.2013, 13:27  [ТС]     Перечислимые типы в разных файлах проекта #3
Теперь в файле заголовочном обьявляю переменную глобальную
C++
1
int globalX=-1;
Эту переменную я использую в некоторых функциях, следующим образом
C++
1
2
3
4
void func() {
globalX=1;
...
}
Компиляция в норме, при запуске получаю ошибки- alredy defined in [название файла].obj
В чем может быть косяк? И можно ли так использовать переменные в функциях?
iRomul
 Аватар для iRomul
158 / 99 / 11
Регистрация: 17.10.2012
Сообщений: 474
Завершенные тесты: 1
07.11.2013, 13:30     Перечислимые типы в разных файлах проекта #4
Спецификатор extern

В языках с\с++ существуют внутренние связи, внешние связи и отсутствие связей. Глобальные переменные имеют внешние связи и это позволяет получить доступ к ним из любой части программы. Если к глобальным переменным добавить спецификатор static, то глобальные переменные утратят внешние связи и будут иметь только внутренние связи, т.е. будут доступны только внутри файла, в котором они были описаны. Локальные переменные не имеют связей и поэтому доступны только внутри блока где они были описаны.

Спецификатор extern указывает, что переменная обладает внешними связями. Дело в том, что надо различать определение и объявление. Объявление указывает имя объекта и его тип, то где как определение выделяет под объект память. Таким образом можно сделать несколько объявлений объекта и только одно определение. В большинстве случаев, определение и объявление совпадают. Спецификатор extern позволяет объявить переменную без её определения т.е без выделения памяти. Используя спецификатор extern можно путём объявления обратиться к переменной, определённой в другом месте. К примеру, можно определить все глобальные переменные в одном файле, а в других файлах получать к ним доступ через объявление со спецификатором extern
[Источник]
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 13:31     Перечислимые типы в разных файлах проекта #5
Глобальную переменную не надо объявлять в заголовочном файле.
Её надо там просто описать: extern int globalX;
newb_programmer
 Аватар для newb_programmer
237 / 237 / 19
Регистрация: 03.09.2011
Сообщений: 553
07.11.2013, 13:44  [ТС]     Перечислимые типы в разных файлах проекта #6
Спасибо за оперативные ответы, хочу уточнить:
В заголовочном- extern int globalX;
В основном- globalX=1;
Так? Или в основном тоже extern надо?
Jazz411
85 / 33 / 3
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.11.2013, 13:51     Перечислимые типы в разных файлах проекта #7
ну по сути extern int globalX достаточно написать в основном и во всех других файлах которых тебе нужно его заюзать, а сам int globalX где-то объявить
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
07.11.2013, 13:51     Перечислимые типы в разных файлах проекта
Еще ссылки по теме:

Связка двух функций в разных .cpp файлах C++
C++ Сравнение строк в разных файлах
C++ Видимость переменной в разных файлах

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
castaway
Эксперт С++
4848 / 2987 / 368
Регистрация: 10.11.2010
Сообщений: 11,028
Записей в блоге: 10
Завершенные тесты: 1
07.11.2013, 13:51     Перечислимые типы в разных файлах проекта #8
Цитата Сообщение от newb_programmer Посмотреть сообщение
В заголовочном- extern int globalX;
В основном- globalX=1;
Так?
Так. Только в основном int globalX=1;
Yandex
Объявления
07.11.2013, 13:51     Перечислимые типы в разных файлах проекта
Ответ Создать тему
Опции темы

Текущее время: 02:47. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru