Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/4: Рейтинг темы: голосов - 4, средняя оценка - 4.75
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558

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

05.11.2013, 14:34. Показов 982. Ответов 7
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Написал прогу:
1.срр - основной файл
2.h - файл с объявлениями функций
2.срр - файл с описанием функций

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

как мне сделать этот тип подступным во всех файлах?? если я добавлю в каждый файл строку
C++
1
enum x {...};
будет ошибка компиляции-множественное объявление.
0
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
05.11.2013, 14:34
Ответы с готовыми решениями:

Использование структуры в файлах проекта
Доброго времени суток всем. У меня тут маленькая проблемка появилась.. Вот есть у меня такой код: // programm.cpp struct NewsInfo ...

Программирование в разных файлах
Я только начинающий программист(даже очень начинающий) и начал с языка c++. У меня есть файл main.cpp, где вам дают выбрать какою функцию...

Видимость переменной в разных файлах
Добрый вечер) Помоги пожалуйста разобраться) Нужно чтобы переменная len из файла 2 попала (была определена) в файле 1. Компилятор выдает...

7
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
05.11.2013, 14:52
Перенеси его в заголовочный файл.
1
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
07.11.2013, 13:27  [ТС]
Теперь в файле заголовочном обьявляю переменную глобальную
C++
1
int globalX=-1;
Эту переменную я использую в некоторых функциях, следующим образом
C++
1
2
3
4
void func() {
globalX=1;
...
}
Компиляция в норме, при запуске получаю ошибки- alredy defined in [название файла].obj
В чем может быть косяк? И можно ли так использовать переменные в функциях?
0
 Аватар для iRomul
163 / 104 / 14
Регистрация: 17.10.2012
Сообщений: 488
07.11.2013, 13:30
Спецификатор extern

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

Спецификатор extern указывает, что переменная обладает внешними связями. Дело в том, что надо различать определение и объявление. Объявление указывает имя объекта и его тип, то где как определение выделяет под объект память. Таким образом можно сделать несколько объявлений объекта и только одно определение. В большинстве случаев, определение и объявление совпадают. Спецификатор extern позволяет объявить переменную без её определения т.е без выделения памяти. Используя спецификатор extern можно путём объявления обратиться к переменной, определённой в другом месте. К примеру, можно определить все глобальные переменные в одном файле, а в других файлах получать к ним доступ через объявление со спецификатором extern
[Источник]
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.11.2013, 13:31
Глобальную переменную не надо объявлять в заголовочном файле.
Её надо там просто описать: extern int globalX;
1
 Аватар для newb_programmer
238 / 238 / 113
Регистрация: 03.09.2011
Сообщений: 558
07.11.2013, 13:44  [ТС]
Спасибо за оперативные ответы, хочу уточнить:
В заголовочном- extern int globalX;
В основном- globalX=1;
Так? Или в основном тоже extern надо?
0
85 / 33 / 12
Регистрация: 12.03.2011
Сообщений: 234
Записей в блоге: 2
07.11.2013, 13:51
ну по сути extern int globalX достаточно написать в основном и во всех других файлах которых тебе нужно его заюзать, а сам int globalX где-то объявить
1
Эксперт С++
4986 / 3093 / 456
Регистрация: 10.11.2010
Сообщений: 11,170
Записей в блоге: 10
07.11.2013, 13:51
Цитата Сообщение от newb_programmer Посмотреть сообщение
В заголовочном- extern int globalX;
В основном- globalX=1;
Так?
Так. Только в основном int globalX=1;
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
07.11.2013, 13:51
Помогаю со студенческими работами здесь

Сравнение строк в разных файлах
В данном файле в первой строке кол-во последующих строк,со второй строки- запись в формате "событие_год". Нужно вывести в...

Объявлние классов в разных заголовочных файлах
Приветствую всех участников форума. Есть 2 класса А и В. Каждый из содержит указатель на другой класс. Как сделать объявление классов в...

Как расположить шаблонный класс в разных файлах?
Есть некоторый класс A, он размещен в разных файлах так: main.cpp : #include <iostream> #include "a.h" int main() { ...

Связка двух функций в разных .cpp файлах
Извиняюсь если тема поднималась, может я плохо искал но не нашел вразумительного объяснения связывания двух функций через заголовочный...

Не могу использовать класс в классе, определённые в разных файлах
Есть значит у меня два файла с классами в visual studio. Первый : #include "Email.h" #include "Folder.h" using...


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

Или воспользуйтесь поиском по форуму:
8
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru