С Новым годом! Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.75/40: Рейтинг темы: голосов - 40, средняя оценка - 4.75
0 / 0 / 1
Регистрация: 19.02.2017
Сообщений: 16

Как использовать одну переменную в двух модулях?

09.12.2017, 18:37. Показов 8043. Ответов 8
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
У меня есть несколько форм. Каждая из них связана через alt+f11 с другими формами. Нужна передавать данные с одной формы на другую. Я создал общий .h файл, занес туда общие переменные и включил его во все остальные модули. Пишет "переменная definde in both module...". Пробовал и extern вставлять в .h файле и #ifndef, все равно либо ошибку выдает, либо создает по несколько одинаковых переменных в разных модулях. Как это правильно делать?
0
Лучшие ответы (1)
IT_Exp
Эксперт
34794 / 4073 / 2104
Регистрация: 17.06.2006
Сообщений: 32,602
Блог
09.12.2017, 18:37
Ответы с готовыми решениями:

Как использовать одну и ту же переменную несколько раз в одном коде
подскажите как использовать одну и туже переменную несколько раз в одном коде допустим А

Как одну функцию использовать в двух проектах
Есть функция которую нужно вызывать в двух проектах Я поместил ее в отдельный .cpp файл Проблема в том что в двух разных проектах...

Как собственные типы (typedef) использовать в других модулях программы
Привет всем. С++ изучаю только, поэтому спотыкаюсь частенько. Сейчас возникла следующая проблема. Суть такая.. Пишу модульную...

8
277 / 226 / 93
Регистрация: 27.06.2016
Сообщений: 639
09.12.2017, 18:53
Лучший ответ Сообщение было отмечено Garis_Sv как решение

Решение

Garis_Sv, для переменных завести cpp-шник, в h файле определять их через extern. Но наверное лучше будет поместить их в какой-нибудь объект (скажем какого-нибудь класса типа GlobalAppState) и дать модулям ссылки на этот объект. По крайней мере, у вас будет больше контроля над их инициализацией.

Добавлено через 11 минут
"для определения переменных завести cpp-шник, в h файле объявлять их через extern." - редактировать уже не могу, поэтому пишу здесь. Но в любом случае, глобальные переменные (по крайней мере в их чистом виде) - зло.
1
 Аватар для Wit5064
0 / 0 / 0
Регистрация: 18.07.2018
Сообщений: 5
26.10.2018, 17:14
extern
надо писать в .c файле где описываешь переменные?
у меня с ним работает вроде.
open watcom
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
26.10.2018, 17:26
Цитата Сообщение от Garis_Sv Посмотреть сообщение
модулях
что такое модуль?
Цитата Сообщение от Garis_Sv Посмотреть сообщение
переменная definde in both module
использовать static?
0
 Аватар для Wit5064
0 / 0 / 0
Регистрация: 18.07.2018
Сообщений: 5
26.10.2018, 19:02
Цитата Сообщение от Azazel-San Посмотреть сообщение

использовать static?
У меня на чем то он обломался.
как правильно?
0
 Аватар для COKPOWEHEU
4082 / 2680 / 432
Регистрация: 09.09.2017
Сообщений: 11,900
26.10.2018, 19:47
file.h
C++
1
2
3
4
5
6
7
8
...
extern int var;
 
class cClass{
  public:
    static int field;
};
...
file.cpp
C++
1
2
3
4
5
#include "file.h"
 
int var;
int cClass::field = 0;
...
main.cpp
C++
1
2
3
4
5
6
7
#include "file.h"
 
int main(){
  var = 1;
  cClass c;
  c.field = 2;
}
0
 Аватар для Wit5064
0 / 0 / 0
Регистрация: 18.07.2018
Сообщений: 5
26.10.2018, 20:07
я написал уже, как с var.
как static какая-то переменная не прописалась. при случае попробую помозговать.
только я еще свои классы не создавал.
начинал в 90-х может начале 0-х с мелкосовтовского C 6.
сейчас поставил перед собой задачу. консольная программа для фидонет узла
0
Mental handicap
 Аватар для Azazel-San
1246 / 624 / 171
Регистрация: 24.11.2015
Сообщений: 2,429
26.10.2018, 21:22
Wit5064, статик глобальная переменная, локальна на 1 единицу трансляции, она какраз и будет в разных модулях копироваться, но это значит что её нельзя повторно использовать в глобальном пространстве, extern наоборот.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
// .h
#pragma once
static int g_value1 = 1024;
extern int g_value2;
 
// .cpp
#include ".h"
int g_value2 = 128; // можно и нужно так сделать
void foo()
{
    g_value1 = 0; // OK
}
 
// main.cpp
...
#include ".h"
g_value1 = 666; // нельзя
int g_value1 = 666; // тоже нельзя уже есть такая в .h
int g_value2 = 128; // нельзя уже есть такая в .cpp
..
main()
{
    g_value1 = 666; // можно, скопированная статик переменная
    std::cout << g_value1 << " " << g_value2;
}
0
 Аватар для Wit5064
0 / 0 / 0
Регистрация: 18.07.2018
Сообщений: 5
27.10.2018, 04:36
Все типы можно описывать как статик?
у меня есть и FILE * и на начало цепочки самописных структур, определенных в .h файле черед typydef?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
BasicMan
Эксперт
29316 / 5623 / 2384
Регистрация: 17.02.2009
Сообщений: 30,364
Блог
27.10.2018, 04:36
Помогаю со студенческими работами здесь

Как сделать одну глобальную переменную
Есть многофайловый проект. К примеру 5 файлов(5 &quot;H&quot; файлов+для них 5 &quot;срр&quot; файлов, пускай в каждом файле будет лежать класс) и есть...

Как прочитать строку с пробелами из файла в одну переменную?
есть текстовый файл, в нем 3 строки как прочитать 1ую строку(она с пробелами) в 1ну переменную пример: asdfasdq asdq 4 1 2 3 4 ...

Как заменить одну переменную на другую во всем коде
Есть, предположим, переменная, которая повторяется в программе 1000 раз, нужно ее заменить на другую - как? microsoft visual studio 2012

Как использовать переменную во всех файлах?
Есть переменные, которые у меня объявлены в main.cpp, а мне надо использовать их в других файлах. Глобальные переменные юзать не хочу, а...

Как использовать первоначальную переменную после ее переназначения?
например есть переменная b ей присвоили число b = 25 и затем ее переназначили b = 50 Как можно использовать первоначальное...


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

Или воспользуйтесь поиском по форуму:
9
Ответ Создать тему
Новые блоги и статьи
Новый CodeBlocs. Версия 25.03
palva 04.01.2026
Оказывается, недавно вышла новая версия CodeBlocks за номером 25. 03. Когда-то давно я возился с только что вышедшей тогда версией 20. 03. С тех пор я давно снёс всё с компьютера и забыл. Теперь. . .
Модель микоризы: классовый агентный подход
anaschu 02.01.2026
Раньше это было два гриба и бактерия. Теперь три гриба, растение. И на уровне агентов добавится между грибами или бактериями взаимодействий. До того я пробовал подход через многомерные массивы,. . .
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути
Programma_Boinc 01.01.2026
Учёным и волонтёрам проекта «Einstein@home» удалось обнаружить четыре гамма-лучевых пульсара в джете Млечного Пути Сочетание глобально распределённой вычислительной мощности и инновационных. . .
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост.
Programma_Boinc 28.12.2025
Советы по крайней бережливости. Внимание, это ОЧЕНЬ длинный пост. Налог на собак: https:/ / **********/ gallery/ V06K53e Финансовый отчет в Excel: https:/ / **********/ gallery/ bKBkQFf Пост отсюда. . .
Кто-нибудь знает, где можно бесплатно получить настольный компьютер или ноутбук? США.
Programma_Boinc 26.12.2025
Нашел на реддите интересную статью под названием Anyone know where to get a free Desktop or Laptop? Ниже её машинный перевод. После долгих разбирательств я наконец-то вернула себе. . .
Thinkpad X220 Tablet — это лучший бюджетный ноутбук для учёбы, точка.
Programma_Boinc 23.12.2025
Рецензия / Мнение/ Перевод Нашел на реддите интересную статью под названием The Thinkpad X220 Tablet is the best budget school laptop period . Ниже её машинный перевод. Thinkpad X220 Tablet —. . .
PhpStorm 2025.3: WSL Terminal всегда стартует в ~
and_y87 14.12.2025
PhpStorm 2025. 3: WSL Terminal всегда стартует в ~ (home), игнорируя директорию проекта Симптом: После обновления до PhpStorm 2025. 3 встроенный терминал WSL открывается в домашней директории. . .
Как объединить две одинаковые БД Access с разными данными
VikBal 11.12.2025
Помогите пожалуйста !! Как объединить 2 одинаковые БД Access с разными данными.
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru