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

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

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

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

18.10.2013, 16:24. Просмотров 709. Ответов 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
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.10.2013, 16:24
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Глобальные переменные (C++):

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

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

Глобальные переменные - C++
Здравствуйте . Разбираю пример с книги на использование глобальных переменных . Там был такой пример: #include &quot;stdafx.h&quot; #include...

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

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

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

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

P.S.

Тут уже много написали, пока я листинг разглядывал :-)
1
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;
Думаю тему можно закрывать
0
18.10.2013, 17:22
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
18.10.2013, 17:22
Привет! Вот еще темы с ответами:

Глобальные переменные - C++
Подскажите пожалуйста, почему данные в глобальной переменной перезаписываются, а не плюсуются? Пример: int peremennaya; void...

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

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

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


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

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

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