Форум программистов, компьютерный форум CyberForum.ru

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
#1

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

18.10.2013, 16:24. Просмотров 640. Ответов 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"
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 16:24     Глобальные переменные
Посмотрите здесь:

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

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

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

Глобальные переменные и константы - C++
Есть проект, большой, с кучей классов и т.д. нужны глобальные переменные, и константы, доступ к которым должны иметь многие классы. Но они...

Используете ли вы глобальные переменные - C++
Добрый вечер, используете ли вы у себя в коде глобальные переменные между единицами трансляции и/или в конкретной? Моё мнение:...

Глобальные переменные (ошибка) - C++
Разбирался в глобальных переменных, программа выдает ошибку... Что не так? #include &lt;iostream&gt; using namespace std; ...

глобальные переменные в модуле - C++
Нужно сохранить пару массивов и несколько переменных, но так чтобы их в основной программе видно не было, хочу сделать статик внутри...

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
18.10.2013, 16:32     Глобальные переменные #2
создай global.cpp с переменной
C++
1
int global_int = 0;
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,398
Записей в блоге: 17
18.10.2013, 16:33     Глобальные переменные #3
1. Использовать глобальные переменные - плохой тон.
2.
C++
1
2
3
int main()
{
    int global_int = 10;
Это не глобальное объявление ...
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:33  [ТС]     Глобальные переменные #4
это обязательно? хотелось бы разобраться с механизмом а не просто решить проблему
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
18.10.2013, 16:34     Глобальные переменные #5
Цитата Сообщение от maxon887 Посмотреть сообщение
extern int global_int;
так она только объявляется, а место для нее нужно выделить в каком то из модулей cpp
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:36  [ТС]     Глобальные переменные #6
Цитата Сообщение от Raali Посмотреть сообщение
extern int global_int;
так она только объявляется, а место для нее нужно выделить в каком то из модулей cpp
ну так вот, место я выбрал в main.cpp
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
18.10.2013, 16:38     Глобальные переменные #7
Цитата Сообщение от maxon887 Посмотреть сообщение
место я выбрал в main.cpp
там ее нет , там есть только main () {int global_int;} которая видна только для функции main,
соответственно объявить надо ее глобально
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,398
Записей в блоге: 17
18.10.2013, 16:38     Глобальные переменные #8
C++
1
int global_int;
Говорит что переменная объявлена и находится в данном текущем файле.
C++
1
extern int global_int;
Это запись лишь говорит о том что переменную нужно взять из другого файла
( при чем речь в действительности речь идет про объектные файлы которые получаются из .cpp файла при компиляции)
DmitryM5
Love~
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 821
Записей в блоге: 1
18.10.2013, 16:40     Глобальные переменные #9
Цитата Сообщение от 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.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 1
18.10.2013, 16:40     Глобальные переменные #10
Цитата Сообщение от DmitryM5 Посмотреть сообщение
А из main убрать инициализацию global_int.
ну это не обязательно на самом деле
Avazart
Эксперт С++
7115 / 5292 / 273
Регистрация: 10.12.2010
Сообщений: 23,398
Записей в блоге: 17
18.10.2013, 16:44     Глобальные переменные #11
Без использования глобальных переменных :
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;
}
gazlan
3130 / 1905 / 285
Регистрация: 27.08.2010
Сообщений: 5,132
Записей в блоге: 1
18.10.2013, 16:59     Глобальные переменные #12
1. Глобальная переменная декларировна, но не определена
2. В функции main() перекрыта локальной с тем же именем
3. Плохая идея

P.S.

Тут уже много написали, пока я листинг разглядывал :-)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 17:22     Глобальные переменные
Еще ссылки по теме:

Глобальные переменные в хедер - C++
имеется data.h, в нем описана переменная int i. далее есть файл source.cpp include &quot;data.h&quot; int main() { i=10; return 0; ...

Убрать глобальные переменные - C++
Помогите пожалуйста убрать глобальные переменные, прога работает на 100% #include &lt;cstring&gt; #include &lt;string&gt; #include &lt;fstream&gt; ...

Глобальные статические переменные - C++
Ребят, может мне кто-нибудь объяснить назначение глобальных статических переменных? Литература (в частности Шилдт) говорит о том, что к...

Глобальные static переменные - C++
main.h class Test { public: void test(); }; static int x; test.cpp

Глобальные переменные в функции - C++
Подскажите плиз, а можна ли глобальную переменную обявить как то в функции?


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

Или воспользуйтесь поиском по форуму:
maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 17:22  [ТС]     Глобальные переменные #13
блин, а ваще запутался
я так понял что в хедерах нельзя определять переменные, для этого и существует слово 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;
Думаю тему можно закрывать
Yandex
Объявления
18.10.2013, 17:22     Глобальные переменные
Ответ Создать тему
Опции темы

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