Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/5: Рейтинг темы: голосов - 5, средняя оценка - 5.00
Canxes
0 / 0 / 0
Регистрация: 08.02.2016
Сообщений: 6
1

Определение глобальных переменных

18.03.2016, 17:21. Просмотров 883. Ответов 4
Метки нет (Все метки)

Доброго времени суток!
Интересует следующий вопрос - Возможно ли определение глобальных переменных в теле подпрограмм или классов?

Гугл, к сожалению, не помог. Единственное, что я нашел - класс памяти extern. Якобы он делает объявленную переменную глобальной. Но в моем коде(ниже) переменная condition не видна во второй функцие work_with_base(). Либо я делаю что-то не так, либо это действительно невозможно.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
//Инициализация глобальной переменной состояний
void init()
{
    extern enum cond { login = 0, menu, selection, add_pers, del_pers, out};
    extern cond condition;
    condition = login;
}
//Передача управления ф-иям в зависимости от текущего значения переменной состояний
void work_with_base()
{
    while (true)
    {
        try
        {
            switch (condition)  
            {
            case login:
            /////////////////
        }   
    }
}
P.S. Собственно, данная переменная нужна для правильной передачи управления между частями программы. Авторизация, работа с базой, добавление пользователей... Есть ли иной, более изящный способ осуществлять передачу управления? Этот тоже неплох, на мой взгляд, но для общего развития хотелось бы узнать.
P.P.S. В принципе, вопрос касается скорее объявления глобальной переменной. Прошу прощения за мою терминалогию

Заранее спасибо за помощь)
0
Лучшие ответы (1)
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.03.2016, 17:21
Ответы с готовыми решениями:

Инициализация глобальных переменных
Требуется инициализировать 2 массива и 2 переменные, которые используются в 2-х функциях, с...

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

Объявление глобальных переменных
#include "stdafx.h" #include <conio.h> #include <stdio.h> void main (int x, int y) {...

поиск глобальных переменных с++
Есть задачка, которую не могу решить. Дано 9000 .cpp файлов, которые являют собой полноценные...

Использование глобальных переменных - моветон ли?
Ребят, очень часто вижу как отцы С++, когда проверяют чей-то код и обнаруживают там глобальные...

4
McFair
7 / 7 / 7
Регистрация: 25.01.2016
Сообщений: 37
18.03.2016, 17:46 2
extern это совсем другое, оно всего лишь показывает компилятору что где то в другом месте объявлены глобальные переменные, и заново их не нужно создавать, например если в двух разных файлах части программы и в одном как раз определены глобальные переменные, то пишешь уже так extern int x, y;
1
rikimaru2013
C++ 2D
2489 / 1155 / 351
Регистрация: 30.11.2013
Сообщений: 3,736
18.03.2016, 17:50 3
Лучший ответ Сообщение было отмечено Canxes как решение

Решение

Canxes, почитайте про Singleton
1
nd2
2958 / 2498 / 1087
Регистрация: 29.01.2016
Сообщений: 8,324
18.03.2016, 18:28 4
Определение переменных в заголовочных файлах
1
jdzvk
18.03.2016, 20:55     Определение глобальных переменных
  #5

Не по теме:

почитал о Singleton. читал недолго, лишь часок.
интересная фишка, этот ваш Синглетон.
относится к так называемым "Порождающим шаблонам", что не точно отражает смысл,
и может иметь различный функционал.
в случае неправильного использования, возможны всяческие неудобства.
----
вычитал: Синглетон нужен для таких вещей как
"недавать различным приложениям одновременно пытаться крутить рукоятку громкости"
к примеру: зазвонил будильник, но плеер, "услышав" из микрофона, что музыка слишком громко,
пытается крутить ручку взад.
Синглетон объявляется, и "говорит" плееру: я Синглетон, оставь ручку в покое до nn:nn:nn(зачёркнуто)
на nn:nn:nn, и исчезает. если у плеера нет коллизии(он не синглетон), плеер расслабляется на указанное время, продолжая играть.
умеет ли Синглетон порождать дубликат себя, чтобы "держать" ручку громкости, не вычитал.
*по идее, Синглетону бы надо это уметь.
"я создал дубликат себя, он держит рукоятку плеера, и могу заниматься прочим, но через nn загляну и дезавуирую дубликат.
а если плеер "переедет"(на второе ядро, к примеру), найду его.
--
то есть программы должны либо понимать, что у них может быть Синглетон,
либо на них должна иметься "курочка карате", которая тоже как бы синглетон.
*Синглетон должен иметь возможность либо "держать ручку", либо отнять её.
*найдёт плеер ручку, когда ему её "отдадут", или не найдёт - забота плеера.
--
поскольку возможное количество одновременно существующих единиц подобного функционала ограничено,
иногда Синглетон следит, чтобы не появлялось подобий себя. не потому, что его взаимодействие с программой
может быть нарушено, а чтобы другие программы не подумали, что что то, крутившее рукоятку плеера, Синглетон.
*а не зловред, к примеру. и кривых реализаций такого функционала - полно.

0
18.03.2016, 20:55
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.03.2016, 20:55
Привет! Вот еще темы с ответами:

Массив (переписать без глобальных переменных)
Помогите написать ету програму без глобальных переменных #include <cstdlib> #include...

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

Вынос глобальных переменных в отдельный файл
Всем привет! Вопрос такой - сижу разбираюсь с вынесением функций в отдельные файлы. Что удалось...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2019, vBulletin Solutions, Inc.
Рейтинг@Mail.ru