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

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

Восстановить пароль Регистрация
 
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:24     Глобальные переменные #1
Я хочу использовать глобальную переменную, определённую в 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++ глобальные переменные
Глобальные и статические глобальные переменные C++
C++ Глобальные переменные
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.10.2013, 16:32     Глобальные переменные #2
создай global.cpp с переменной
C++
1
int global_int = 0;
Avazart
 Аватар для Avazart
6912 / 5152 / 254
Регистрация: 10.12.2010
Сообщений: 22,660
Записей в блоге: 17
18.10.2013, 16:33     Глобальные переменные #3
1. Использовать глобальные переменные - плохой тон.
2.
C++
1
2
3
int main()
{
    int global_int = 10;
Это не глобальное объявление ...
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:33  [ТС]     Глобальные переменные #4
это обязательно? хотелось бы разобраться с механизмом а не просто решить проблему
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.10.2013, 16:34     Глобальные переменные #5
Цитата Сообщение от maxon887 Посмотреть сообщение
extern int global_int;
так она только объявляется, а место для нее нужно выделить в каком то из модулей cpp
maxon887
 Аватар для maxon887
12 / 12 / 3
Регистрация: 05.06.2012
Сообщений: 280
18.10.2013, 16:36  [ТС]     Глобальные переменные #6
Цитата Сообщение от Raali Посмотреть сообщение
extern int global_int;
так она только объявляется, а место для нее нужно выделить в каком то из модулей cpp
ну так вот, место я выбрал в main.cpp
Raali
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.10.2013, 16:38     Глобальные переменные #7
Цитата Сообщение от maxon887 Посмотреть сообщение
место я выбрал в main.cpp
там ее нет , там есть только main () {int global_int;} которая видна только для функции main,
соответственно объявить надо ее глобально
Avazart
 Аватар для Avazart
6912 / 5152 / 254
Регистрация: 10.12.2010
Сообщений: 22,660
Записей в блоге: 17
18.10.2013, 16:38     Глобальные переменные #8
C++
1
int global_int;
Говорит что переменная объявлена и находится в данном текущем файле.
C++
1
extern int global_int;
Это запись лишь говорит о том что переменную нужно взять из другого файла
( при чем речь в действительности речь идет про объектные файлы которые получаются из .cpp файла при компиляции)
DmitryM5
Love~
 Аватар для DmitryM5
51 / 51 / 3
Регистрация: 27.08.2013
Сообщений: 743
Записей в блоге: 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
572 / 276 / 12
Регистрация: 06.07.2013
Сообщений: 917
Завершенные тесты: 1
18.10.2013, 16:40     Глобальные переменные #10
Цитата Сообщение от DmitryM5 Посмотреть сообщение
А из main убрать инициализацию global_int.
ну это не обязательно на самом деле
Avazart
 Аватар для Avazart
6912 / 5152 / 254
Регистрация: 10.12.2010
Сообщений: 22,660
Записей в блоге: 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
2867 / 1815 / 272
Регистрация: 27.08.2010
Сообщений: 4,921
Записей в блоге: 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++
Глобальные переменные C++
C++ Глобальные переменные

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

Или воспользуйтесь поиском по форуму:
maxon887
 Аватар для 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     Глобальные переменные
Ответ Создать тему
Опции темы

Текущее время: 18:03. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru