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

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

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

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

30.09.2013, 18:18. Просмотров 323. Ответов 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.

Как это правильно сделать?
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
30.09.2013, 18:18
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Область видимости переменных (C++):

Область видимости переменных - C++
Как использовать одну переменную в нескольких файлах, если эта переменная задана только в одном. Файлы между собой связаны Добавлено...

Область видимости переменных - C++
Не компилируется программа, пишет, что count не является однозначным... #include <iostream> #include <stdio.h> using namespace std; ...

Пример автоматических переменных и область их видимости - C++
Здравствуйте, пишу на форуме в первый раз и я только начал изучать программирование C++(по книге Хортона). Книга написана на версию VS...

Область видимости и время жизни переменных внутри класса - C++
Есть класс, определение в файле myclass.h, реализация myclass.cpp Как и где правильно определить глобальную переменную, чтоб ее значение...

Нюансы работы с лямбдами и область видимости переменных: как передать в лямбду переменную, а не её копию? - C++
Очень нужна помощь, не выходит задать глобальную переменную для работы программы, возможно нужно немного изменить код функции: Функция...

Область видимости - C++
func { int someVariable; { int someVariable; //можно ли как нибудь получить доступ к переменной...

Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Fyret
184 / 170 / 13
Регистрация: 30.07.2013
Сообщений: 359
30.09.2013, 18:22 #2
Правильно этого не делать. Но если очень хочется, объявите эту переменную в class.cpp как extern.
Raali
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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
623 / 327 / 34
Регистрация: 06.07.2013
Сообщений: 1,056
Завершенные тесты: 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
Спасибо. Работает. Буду пользоваться этим вариантом.
HedgehogLu
147 / 68 / 1
Регистрация: 04.09.2013
Сообщений: 260
30.09.2013, 19:17 #7
Цитата Сообщение от fps Посмотреть сообщение
Хорошо, но как тогда можно сделать какую-нибудь глобальную переменную. Не передавать же каждый раз её в класс вручную?
Если я не ошибаюсь, то правильнее было бы в main.cpp создать дочерний клас, который уже будет знать о существующей глобальной переменной и в то же время унаследует все необходимые методы, более того необходимые методы можно переопределить в дочернем классе.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
30.09.2013, 19:17
Привет! Вот еще темы с ответами:

Область видимости в С++ - C++
В книге С++ Бархатный путь. ( http://khpi-iip.mipk.kharkiv.edu/library/extent/prog/cppvw/cpp_047.html) сказано, что область действия имен...

Область видимости - C++
Здравствуйте. Тут такое дело: #include <vector> class SomeClass { public: SomeClass( std::vector< int > v ) : vec( v ) {} ...

Область видимости - C++
Даю фрагмент программы: #include <iostream> #include <stdio.h> #include <cmath> struct elem //тип элемента двусвязного списка ...

Область видимости - C++
У меня возникла проблема с областью видимости. вот у меня два класса class Obj { public: Win *parent;


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

Или воспользуйтесь поиском по форуму:
Yandex
Объявления
30.09.2013, 19:17
Ответ Создать тему
Опции темы

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