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

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

18.10.2013, 16:24. Показов 2650. Ответов 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
3176 / 1935 / 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
Ответ Создать тему
Новые блоги и статьи
Инструменты COM: Сохранение данный из VARIANT в файл и загрузка из файла в VARIANT
bedvit 28.01.2026
Сохранение базовых типов COM и массивов (одномерных или двухмерных) любой вложенности (деревья) в файл, с возможностью выбора алгоритмов сжатия и шифрования. Часть библиотеки BedvitCOM Использованы. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 28.01.2026
Содержание блога SDL3 имеет собственные средства для загрузки и отображения PNG-файлов с альфа-каналом и базовой работы с ними. В этой инструкции используется функция SDL_LoadPNG(), которая. . .
Загрузка PNG с альфа-каналом на SDL3 для Android: с помощью SDL3_image
8Observer8 27.01.2026
Содержание блога SDL3_image - это библиотека для загрузки и работы с изображениями. Эта пошаговая инструкция покажет, как загрузить и вывести на экран смартфона картинку с альфа-каналом, то есть с. . .
влияние грибов на сукцессию
anaschu 26.01.2026
Бифуркационные изменения массы гриба происходят тогда, когда мы уменьшаем массу компоста в 10 раз, а скорость прироста биомассы уменьшаем в три раза. Скорость прироста биомассы может уменьшаться за. . .
Воспроизведение звукового файла с помощью SDL3_mixer при касании экрана Android
8Observer8 26.01.2026
Содержание блога SDL3_mixer - это библиотека я для воспроизведения аудио. В отличие от инструкции по добавлению текста код по проигрыванию звука уже содержится в шаблоне примера. Нужно только. . .
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru