Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.77/13: Рейтинг темы: голосов - 13, средняя оценка - 4.77
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280

Глобальные переменные

18.10.2013, 16:24. Показов 2681. Ответов 12
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
Я хочу использовать глобальную переменную, определённую в main, в своих классах.
Листинг))

globals.h
C++
1
2
3
4
#ifndef GLOBASL_H
#define GLOBASL_H
extern int global_int;
#endif // GLOBASL_H
a.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef A_H
#define A_H
#include "globasl.h"
#include <iostream>
using std::cout;
class A
{
public:
    A();
    void f();
};
 
#endif // A_H
a.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "a.h"
 
A::A()
{
}
 
void A::f()
{
    cout<<global_int<<"\n";
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "globasl.h"
#include "a.h"
using std::cout;
 
int main()
{
    int global_int = 10;
    A a;
    a.f();
    cout<<"test\n";
    return 0;
}
Добавлено через 1 минуту
Но однако компилятор пишет "unresolved external symbol"
0
Programming
Эксперт
39485 / 9562 / 3019
Регистрация: 12.04.2006
Сообщений: 41,671
Блог
18.10.2013, 16:24
Ответы с готовыми решениями:

Глобальные и статические глобальные переменные
Скажите, чем отличаются глобальные переменные от статических глобальных переменных?

Глобальные переменные
Здравствуйте! Возникла видимо классическая проблема, но перечитав кучу сайтов так ее и не решил. Пишу в VS2005, имеются 2 срр файла...

Глобальные переменные
Я правильно понимаю: &quot;в c++ использовать глобальные переменные не безопасно, т. к. др. программы могут случайно поменять значение этих...

12
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.10.2013, 16:32
создай global.cpp с переменной
C++
1
int global_int = 0;
0
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.10.2013, 16:33
1. Использовать глобальные переменные - плохой тон.
2.
C++
1
2
3
int main()
{
    int global_int = 10;
Это не глобальное объявление ...
1
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:33  [ТС]
это обязательно? хотелось бы разобраться с механизмом а не просто решить проблему
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.10.2013, 16:34
Цитата Сообщение от maxon887 Посмотреть сообщение
extern int global_int;
так она только объявляется, а место для нее нужно выделить в каком то из модулей cpp
1
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:36  [ТС]
Цитата Сообщение от Raali Посмотреть сообщение
extern int global_int;
так она только объявляется, а место для нее нужно выделить в каком то из модулей cpp
ну так вот, место я выбрал в main.cpp
0
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.10.2013, 16:38
Цитата Сообщение от maxon887 Посмотреть сообщение
место я выбрал в main.cpp
там ее нет , там есть только main () {int global_int;} которая видна только для функции main,
соответственно объявить надо ее глобально
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.10.2013, 16:38
C++
1
int global_int;
Говорит что переменная объявлена и находится в данном текущем файле.
C++
1
extern int global_int;
Это запись лишь говорит о том что переменную нужно взять из другого файла
( при чем речь в действительности речь идет про объектные файлы которые получаются из .cpp файла при компиляции)
1
Консультант Витте
 Аватар для DmitryM5
106 / 86 / 45
Регистрация: 27.08.2013
Сообщений: 1,356
Записей в блоге: 1
18.10.2013, 16:40
Цитата Сообщение от maxon887 Посмотреть сообщение
Я хочу использовать глобальную переменную, определённую в main, в своих классах.
Листинг))

globals.h
C++
1
2
3
4
#ifndef GLOBASL_H
#define GLOBASL_H
extern int global_int;
#endif // GLOBASL_H
a.h
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#ifndef A_H
#define A_H
#include "globasl.h"
#include <iostream>
using std::cout;
class A
{
public:
    A();
    void f();
};
 
#endif // A_H
a.cpp
C++
1
2
3
4
5
6
7
8
9
10
#include "a.h"
 
A::A()
{
}
 
void A::f()
{
    cout<<global_int<<"\n";
}
main.cpp
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream>
#include "globasl.h"
#include "a.h"
using std::cout;
 
int main()
{
    int global_int = 10;
    A a;
    a.f();
    cout<<"test\n";
    return 0;
}
Добавлено через 1 минуту
Но однако компилятор пишет "unresolved external symbol"
Попробуй в a.cpp добавить это :
C++
1
int global_int;
А из main убрать инициализацию global_int.
1
859 / 448 / 112
Регистрация: 06.07.2013
Сообщений: 1,491
18.10.2013, 16:40
Цитата Сообщение от DmitryM5 Посмотреть сообщение
А из main убрать инициализацию global_int.
ну это не обязательно на самом деле
1
Эксперт С++
 Аватар для Avazart
8488 / 6155 / 615
Регистрация: 10.12.2010
Сообщений: 28,683
Записей в блоге: 30
18.10.2013, 16:44
Без использования глобальных переменных :
C++
1
2
3
4
void A::f(int some_var)
{
    cout<<some_var<<"\n";
}
C++
1
2
3
4
5
6
7
8
int main()
{
    int some= 10;
    A a;
    a.f(some); // print 10
    cout<<"test\n";
    return 0;
}
1
3178 / 1937 / 312
Регистрация: 27.08.2010
Сообщений: 5,131
Записей в блоге: 1
18.10.2013, 16:59
1. Глобальная переменная декларировна, но не определена
2. В функции main() перекрыта локальной с тем же именем
3. Плохая идея

P.S.

Тут уже много написали, пока я листинг разглядывал :-)
1
 Аватар для maxon887
12 / 12 / 7
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 17:22  [ТС]
блин, а ваще запутался
я так понял что в хедерах нельзя определять переменные, для этого и существует слово extern. правильно?

Добавлено через 45 секунд
ну всмысле extern для того чтоб потом инклюдить этот хедер и она была видна визде

Добавлено через 5 минут
ещё меня смутило что я читал вот эту статью
и там в main.cpp написано вот так
C++
1
    apl = new Application();
а в globals.h вот так
C++
1
2
class Application;
extern Application* apl;
Добавлено через 44 секунды
и самое интерестное что apl = new Application(); в теле функции

Добавлено через 14 минут
АААаа, блин точно он ещё в Application.cpp указал
Application *apl = NULL;
Думаю тему можно закрывать
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
inter-admin
Эксперт
29715 / 6470 / 2152
Регистрация: 06.03.2009
Сообщений: 28,500
Блог
18.10.2013, 17:22
Помогаю со студенческими работами здесь

Глобальные переменные
Всем привет, помогите разобраться, не запускается программа: https://pastebin.com/aSun14x7

Глобальные переменные
Доброго времени суток всем. У меня следующая проблема: объявляю глобально переменную типа структуры dealer* root;. Далее в коде...

глобальные переменные
здравствуйте, я только начал изучать C++, в книге Штидта Г. есть такой код, он выводит: count + число, помогите понять принцип работы этого...

Глобальные переменные
Как в C++ завести глобальную (общую для функции и самой программы) переменную?

глобальные переменные
Пробовал объявить глобальные переменные следующим образом: в заголовочном файле head.h #ifndef DF_H #define DF_H //объявления...


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

Или воспользуйтесь поиском по форуму:
13
Ответ Создать тему
Новые блоги и статьи
Автоматическое создание документа при проведении другого документа
Maks 29.03.2026
Реализация из решения ниже выполнена на нетиповых документах, разработанных в конфигурации КА2. Есть нетиповой документ "ЗаявкаНаРемонтСпецтехники" и нетиповой документ "ПланированиеСпецтехники". В. . .
Настройка движения справочника по регистру сведений
Maks 29.03.2026
Решение ниже реализовано на примере нетипового справочника "ТарифыМобильнойСвязи" разработанного в конфигурации КА2, с целью учета корпоративной мобильной связи в коммерческом предприятии. . . .
Автозаполнение реквизита при выборе элемента справочника
Maks 27.03.2026
Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. При выборе "Спецтехники" (Тип Справочник. Спецтехника), заполняется. . .
Сумматор с применением элементов трёх состояний.
Hrethgir 26.03.2026
Тут. https:/ / fips. ru/ EGD/ ab3c85c8-836d-4866-871b-c2f0c5d77fbc Первый документ красиво выглядит, но без схемы. Это конечно не даёт никаких плюсов автору, но тем не менее. . . всё может быть. . .
Автозаполнение реквизитов при создании документа
Maks 26.03.2026
Программный код из решения ниже размещается в модуле объекта документа, в процедуре "ПриСозданииНаСервере". Алгоритм проверки заполнения реализован для исключения перезаписи значения реквизита,. . .
Команды формы и диалоговое окно
Maks 26.03.2026
1. Команда формы "ЗаполнитьЗапчасти". Программный код из решения ниже на примере нетипового документа "ЗаявкаНаРемонтСпецтехники" разработанного в конфигурации КА2. В качестве источника данных. . .
Кому нужен AOT?
DevAlt 26.03.2026
Решил сделать простой ланчер Написал заготовку: dotnet new console --aot -o UrlHandler var items = args. Split(":"); var tag = items; var id = items; var executable = args;. . .
Отправка уведомления на почту при создании или изменении элементов справочника
Maks 24.03.2026
Программная отправка письма электронной почты на примере типового справочника "Склады" в конфигурации БП3. Перед реализацией необходимо выполнить настройку системной учетной записи электронной. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru