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

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

Войти
Регистрация
Восстановить пароль
 
fps
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 5
#1

Область видимости переменных - C++

30.09.2013, 18:18. Просмотров 304. Ответов 6
Метки нет (Все метки)

Здравствуйте. Столкнулся со следующей проблемой:
есть файл main.cpp:
C++
1
2
3
4
5
6
7
8
int a, b;
 
#include "class.h"
 
int main()
{
   return 0;
}
так-же class.h:
C++
1
2
3
4
class myClass
{
   void func();
}
и class.cpp:
C++
1
2
3
4
5
6
#include "class.h"
 
void myClass::func()
{
    //...
}
Проблема в том, что я не могу получить доступ в функции myClass::func() доступ к переменной a, объявленной в main.cpp.

Как это правильно сделать?
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
30.09.2013, 18:22     Область видимости переменных #2
Правильно этого не делать. Но если очень хочется, объявите эту переменную в class.cpp как extern.
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
30.09.2013, 18:24     Область видимости переменных #3
Цитата Сообщение от fps Посмотреть сообщение
Как это правильно сделать?
вообще правильно бы было передать указатель на них через функцию в класс

C++
1
2
3
4
void myClass::func(int *a)
{
 *a = -1;
}
fps
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 5
30.09.2013, 18:26  [ТС]     Область видимости переменных #4
Хорошо, но как тогда можно сделать какую-нибудь глобальную переменную. Не передавать же каждый раз её в класс вручную?
Raali
622 / 326 / 34
Регистрация: 06.07.2013
Сообщений: 1,049
Завершенные тесты: 1
30.09.2013, 18:33     Область видимости переменных #5
Цитата Сообщение от Fyret Посмотреть сообщение
Правильно этого не делать. Но если очень хочется, объявите эту переменную в class.cpp как extern.
C++
1
extern int a;
в файле class.cpp
fps
0 / 0 / 0
Регистрация: 30.09.2013
Сообщений: 5
30.09.2013, 18:43  [ТС]     Область видимости переменных #6
Спасибо. Работает. Буду пользоваться этим вариантом.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2013, 19:17     Область видимости переменных
Еще ссылки по теме:

C++ Область видимости
Область видимости и указатели C++
Область видимости переменных C++
C++ Нюансы работы с лямбдами и область видимости переменных: как передать в лямбду переменную, а не её копию?
Пример автоматических переменных и область их видимости C++

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

Или воспользуйтесь поиском по форуму:
HedgehogLu
 Аватар для HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 254
30.09.2013, 19:17     Область видимости переменных #7
Цитата Сообщение от fps Посмотреть сообщение
Хорошо, но как тогда можно сделать какую-нибудь глобальную переменную. Не передавать же каждый раз её в класс вручную?
Если я не ошибаюсь, то правильнее было бы в main.cpp создать дочерний клас, который уже будет знать о существующей глобальной переменной и в то же время унаследует все необходимые методы, более того необходимые методы можно переопределить в дочернем классе.
Yandex
Объявления
30.09.2013, 19:17     Область видимости переменных
Ответ Создать тему
Опции темы

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