Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.96/47: Рейтинг темы: голосов - 47, средняя оценка - 4.96
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515

Как лучше сделать глобальную переменную?

08.01.2017, 09:11. Показов 9920. Ответов 35
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Интернет совсем пустой в плане глобальных переменных на с++

Задача следующая:
1. Нужно создать много глобальных переменных будет штук 100 к примеру. Каждую объявлять не интересно.
2. Глобальные переменные должны быть доступны всем файлам спп.
3. Я не хочу объявлять 100 переменных для каждого файла через extern
4. Лучше создать структуру или класс для этого. и объявить класс или структуру для файла спп.
5. Нужно что-нибудь статическое. Сразу создал класс или структуру и тут же прямо в классе объявляешь значение каждой глобальной переменной.
6. Каждая глобальная переменная должна иметь возможность на прямую менять значение.
7. Я не хочу писать много кода. 100 переменных умножать в два раза и потом получить 200 строк кода. Увольте. Дайте простой рецепт.
0
Лучшие ответы (1)
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
08.01.2017, 09:11
Ответы с готовыми решениями:

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

Как создать глобальную переменную?
Доброй ночи. Спасайте. Надо создать глобальную переменную string, Значение которой будет задаваться в одном классе, а использоваться в...

Как обьявить глобальную переменную
Как объявить глобальную переменную Есть несколько *CPP* и *.h* файлы. Надо объявить переменную HWND hwnd чтобы она была доступна в...

35
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 15:52  [ТС]
Студворк — интернет-сервис помощи студентам
Заставил я ее работать!
Оказывается в заголовочном файле .h нельзя присваивать значения переменным. Получается ошибка объявления переменных.
Вынес присвоение в спп файл.

Добавлено через 1 час 10 минут
Я оказывается недооценил глобальные переменные в С++.
В общем задача еще не решена. Кто решит? Получит бонус.

Добавлено через 1 минуту
Не знаю как объявить переменную структуры и класса для всех файлов спп.
Нужен полный код.
0
415 / 150 / 48
Регистрация: 02.06.2016
Сообщений: 364
08.01.2017, 15:59
Цитата Сообщение от infobos Посмотреть сообщение
Нужно что-нибудь статическое. Сразу создал класс или структуру и тут же прямо в классе объявляешь значение каждой глобальной переменной.
Цитата Сообщение от infobos Посмотреть сообщение
Я не хочу писать много кода. 100 переменных умножать в два раза и потом получить 200 строк кода. Увольте. Дайте простой рецепт.
В одном классе данные без всяких static, во втором одно поле static - указатель на объект первого класса.
0
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 16:00  [ТС]
Цитата Сообщение от GoshaM Посмотреть сообщение
В одном классе данные без всяких static, во втором одно поле static - указатель на объект первого класса.
Я не понимаю о чем Вы. Напишите код.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
08.01.2017, 16:01
Лучший ответ Сообщение было отмечено infobos как решение

Решение

GVars.h
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
#ifndef _GVars_H
#define _GVars_H
class GVars
{
 public:   
    
    int x;
    int y;
    int z;
 
    static GVars& getGVars()
    {
        static GVars gvar;
        return gvar;
    }
 
private:  
    
    GVars() : x(1), y(2), z(3)
    {}
 
    GVars(const GVars&);
    GVars& operator=(const GVars&);
};
#endif
any.cpp
C++
1
2
3
4
5
#include "GVars.h"
//...
GVars::getGVars().y = 4;
std::cout << GVars::getGVars().z << std::endl;
//...
1
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 16:12  [ТС]
Не работает ваш код!
У меня приложение win32 (не консольное)

Первая же команда (GVars::getGVars().y = 4
Не работает.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
08.01.2017, 16:17
Цитата Сообщение от infobos Посмотреть сообщение
Не работает ваш код!
Он не может не работать. Что пишет?

Добавлено через 1 минуту
Цитата Сообщение от infobos Посмотреть сообщение
Первая же команда (GVars::getGVars().y = 4
У меня там нет такого. Что за скобка впереди? У меня так:
Цитата Сообщение от nd2 Посмотреть сообщение
C++
1
GVars::getGVars().y = 4;
1
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 16:18  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Он не может не работать. Что пишет?
Скриншот
Миниатюры
Как лучше сделать глобальную переменную?  
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
08.01.2017, 16:20
Цитата Сообщение от infobos Посмотреть сообщение
Скриншот
Кто тебя научил вызов функции в глобальной области делать?
1
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
08.01.2017, 16:25
infobos, наверное, Вы имеете в виду статические члены класса?
C++
1
2
3
4
5
6
7
class S{
public:
static int x;//   S::x  это статический член класса 
};
 int S::x=1;//   S::x  это статический член класса 
 
int g;  // g - это глобальная переменная
0
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 16:30  [ТС]
Цитата Сообщение от nd2 Посмотреть сообщение
Кто тебя научил вызов функции в глобальной области делать?
Да сам так захотел.
Вот теперь дошло! Все работает!

Добавлено через 4 минуты
Короче всем спасибо! Заработало! Я тупанул же...
nd2 С меня бонус за подсказку. Кошелек Webmoney или яндекс деньги в личку напиши. Завтра с утра с рабочего ПК кину.
0
1130 / 789 / 232
Регистрация: 12.04.2010
Сообщений: 2,012
08.01.2017, 16:31
Пример глобальной переменной.
C++
1
2
3
4
5
6
7
int g=1;
 
int main()
{
  g = 4;
  // ... 
}
0
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 16:35  [ТС]
Цитата Сообщение от Alex5 Посмотреть сообщение
Пример глобальной переменной.
Тут намного серьезнее вашего кода.
0
 Аватар для dailydose
671 / 217 / 88
Регистрация: 21.07.2016
Сообщений: 1,036
Записей в блоге: 2
08.01.2017, 17:17
да показали бы ему уже нормальный пример с синглтон-конфигом)
0
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 17:25  [ТС]
Цитата Сообщение от dailydose Посмотреть сообщение
да показали бы ему уже нормальный пример с синглтон-конфигом)
А покажите Вы.
0
nd2
3438 / 2817 / 1249
Регистрация: 29.01.2016
Сообщений: 9,427
08.01.2017, 18:25
Цитата Сообщение от infobos Посмотреть сообщение
А покажите Вы.
Мой код - это и есть оно.
0
Строитель
 Аватар для infobos
460 / 77 / 4
Регистрация: 18.06.2010
Сообщений: 515
08.01.2017, 18:39  [ТС]
Пришлось
Цитата Сообщение от nd2 Посмотреть сообщение
Мой код - это и есть оно.
Меня не устраивает такое выражение глобальной переменной (GVars::getGVars().y) оно слишком длинное. И имеет точку, двоеточие и еще в придачу скобки. Поэтому наверно обойдусь одноименными переменными. Просто они будут отличатся первыми буквами.

Еще наверняка ваш код с методом имеет большую нагрузку. Что в будущем приведет к тормозам программы. Скорость работы программы будет снижена!

Добавлено через 11 минут
Еще нашел способ как заставить работать includы. они позволяют не писать много кода. Это из-за того, что в инете в статьях не правильно говорят о подключении кодов. И я с ними за компанию.
Завтра наверно отпишусь о том, как нужно подключать глобальные переменные.
Наверно создам новую тему без хлама.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
08.01.2017, 18:39
Помогаю со студенческими работами здесь

Как создать глобальную переменную?
Создаю небольшой проект. Несколько функций и собственно тело программы. В теле объявил переменную int rep. Далее мне надо обратиться к ней...

Как объявить глобальную переменную в Dev-C++ 4.9.9.2?
Попробовал написать из справочника по С++ такую программу: #include &lt;iostream&gt; #include &lt;windows.h&gt; using namespace std; ...

Как и где описать глобальную переменную?
Как и где описать глобальную переменную? В главном класее я определяю указутель на CDaoDatabase CDaoDatabase* DBase; DBase = new...

Как обьявить глобальную переменную в функции?
Вопрос как объявить переменную в функции чтобы ей можно было пользоваться везде?

Как глобальную переменную засунуть в структуру?
#include&lt;stdio.h&gt; #include&lt;malloc.h&gt; #include&lt;string.h&gt; typedef struct Item { char *info; struct Item *next; ...


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

Или воспользуйтесь поиском по форуму:
36
Ответ Создать тему
Новые блоги и статьи
1С: Программный отбор элементов справочника по группе
Maks 22.03.2026
Установка программного отбора элементов справочника "Номенклатура" из модуля формы документа. В качестве фильтра для отбора справочника служит группа номенклатуры. Отбор по наименованию группы. . .
Как я обхитрил таблицу Word
Alexander-7 21.03.2026
Когда мигает курсор у внешнего края таблицы, и нам надо перейти на новую строку, а при нажатии Enter создается новый ряд таблицы с ячейками, то мы вместо нервных нажатий Энтеров мы пишем любые буквы. . .
Krabik - рыболовный бот для WoW 3.3.5a
AmbA 21.03.2026
без регистрации и смс. Это не торговля, приложение не содержит рекламы. Выполняет свою непосредственную задачу - автоматизацию рыбалки в WoW - и ничего более. Однако если админы будут против -. . .
1С: Программный отбор элементов справочника по значению перечисления
Maks 21.03.2026
Установка программного отбора элементов справочника "Сотрудники" из модуля формы документа. В качестве фильтра для отбора служит значение перечислений. / / Событие "НачалоВыбора" реквизита на форме. . .
Переходник USB-CAN-GPIO
Eddy_Em 20.03.2026
Достаточно давно на работе возникла необходимость в переходнике CAN-USB с гальваноразвязкой, оный и был разработан. Однако, все меня терзала совесть, что аж 48-ногий МК используется так тупо: просто. . .
Оттенки серого
Argus19 18.03.2026
Оттенки серого Нашёл в интернете 3 прекрасных модуля: Модуль класса открытия диалога открытия/ сохранения файла на Win32 API; Модуль класса быстрого перекодирования цветного изображения в оттенки. . .
SDL3 для Desktop (MinGW): Рисуем цветные прямоугольники с помощью рисовальщика SDL3 на Си и C++
8Observer8 17.03.2026
Содержание блога Финальные проекты на Си и на C++: finish-rectangles-sdl3-c. zip finish-rectangles-sdl3-cpp. zip
Символические и жёсткие ссылки в Linux.
algri14 15.03.2026
Существует два типа ссылок — символические и жёсткие. Ссылка в Linux — это запись в каталоге, которая может указывать либо на inode «файла-ИСТОЧНИКА», тогда это будет «жёсткая ссылка» (hard link),. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru