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

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

Войти
Регистрация
Восстановить пароль
 
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
#1

Глобальная видимость переменной в проекте - C++

08.12.2013, 17:36. Просмотров 657. Ответов 8
Метки нет (Все метки)

Как сделать, чтобы переменная была доступна в любой части проекта?

Делаю так:
Код
// test_me_1.cpp: определяет точку входа для консольного приложения.
//
#include "stdafx.h"
#include "test_me_1.h"


int _tmain(int argc, _TCHAR* argv[])
{
	myClass->setUpdate();
	system("pause");
	return 0;
}
Код
// test_me_1.h описывает глобальные переменные
#include "MyClass.h"

static int* my_int = new int(10);
static MyClass* myClass = new MyClass();

static int* getMyInt();

static int* getMyInt()
{
	return my_int;
}
Код
// MyClass.h класс, в котором должны использоваться глобальные переменные.
#include <iostream>

class MyClass
{
public:
	MyClass()
	{

	}

	void setUpdate()
	{
		std::cout << "My int from MyClass.h: " << *getMyInt() << "\n";
	}
};
Дело в том, что при компиляции выдает ошибку:
1>c:\users\admin\documents\visual studio 2010\projects\test_me_1\test_me_1\myclass.h(13): error C3861: getMyInt: идентификатор не найден
В учебнике написано, что для глобальной видимости достаточно написать индефикатор static перед переменной или ф-цие. У меня в .cpp переменные видит, а в файле класса - нет. Как можно решить данную проблему?
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.12.2013, 17:36
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Глобальная видимость переменной в проекте (C++):

static и глобальная видимость - C++
прочитал что если писать static int a = 5; то a будет видно ото всюду но оказалосбь это не так... void a(); int main() { ...

Видимость переменной - C++
Доброго времени суток. Нужна небольшая консультация по программе. У меня программа состоит из нескольких методов в каждом из которых...

Видимость переменной - C++
Подскажите пожалуйста, если у меня есть две функции, в которых мне надо использовать одну и ту же константу, правильнее будет сделать её...

Видимость переменной в разных файлах - C++
Добрый вечер) Помоги пожалуйста разобраться) Нужно чтобы переменная len из файла 2 попала (была определена) в файле 1. Компилятор выдает...

Разделение класса со статической переменной в многофайловом проекте - C++
На ровном месте происходят какие-то непонятные чудеса, как будто бы я шаблонный класс объявляю - если реализация класса находится в...

в проекте - надо в проекте win32api вынести все в другой *cpp* а не получаеться - C++
определил функцию в другом спп и в основном ругается компилятор

8
Кудаив
329 / 406 / 24
Регистрация: 27.05.2012
Сообщений: 1,168
Завершенные тесты: 2
08.12.2013, 17:44 #2
static ограничивает видимость в единице трансляции
1
Nikkilla
2 / 2 / 0
Регистрация: 24.02.2013
Сообщений: 62
08.12.2013, 17:46  [ТС] #3
а как распостранить видимость на весь проект?
0
lpvoid
322 / 305 / 17
Регистрация: 06.03.2013
Сообщений: 869
08.12.2013, 17:49 #4
Nikkilla, попробуйте в MyClass.h объявить:
C++
1
extern int getMyInt();
и потом вызывать.
1
alsav22
5426 / 4821 / 442
Регистрация: 04.06.2011
Сообщений: 13,587
08.12.2013, 17:49 #5
Цитата Сообщение от Nikkilla Посмотреть сообщение
В учебнике написано, что для глобальной видимости достаточно написать индефикатор static перед переменной или ф-цие.
Хотелось бы увидеть этот учебник... Глобальное объявление - это объявление вне каких-либо функций. Чтобы такую переменую можно было использовать в других файлах, её нужно объявить в этих файлах как extern. Если к глобальному объялению добавить static, то видимость такой переменной ограничена данным файлом.
1
lpvoid
322 / 305 / 17
Регистрация: 06.03.2013
Сообщений: 869
08.12.2013, 17:50 #6
alsav22,

Не по теме:

простите, вопрос не по теме, но и отдельный топик писать для этого не хочется. что делает оператор разрешения области видимости - :: ?

1
Alexsandr_S
5 / 5 / 1
Регистрация: 23.10.2013
Сообщений: 18
08.12.2013, 17:51 #7
допиши в MyClass.h #include"test_me_1.h" где ты объявляеш эту переменную
1
alsav22
08.12.2013, 18:08
  #8

Не по теме:

Цитата Сообщение от lpvoid Посмотреть сообщение
что делает оператор разрешения области видимости - :: ?
Ну, как что? Указывает область (пространство имён, класс) нахождения того, что за ::. Если имени перед :: нет, то глобальное пространство имён.

1
lpvoid
322 / 305 / 17
Регистрация: 06.03.2013
Сообщений: 869
08.12.2013, 18:10 #9
alsav22, спасибо, интересно было именно если перед ним имени нет. +1 вам.
0
08.12.2013, 18:10
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.12.2013, 18:10
Привет! Вот еще темы с ответами:

a,b и c.Присвоить максимальное из них переменной a,минимальное-переменной c,среднее переменной b - C++
даны произвольные числа a,b и c.Присвоить максимальное из них переменной a,минимальное-переменной c,среднее переменной b.

Присвоить значение наименьшего элемента массива переменной М1, номер строки, где находится этот элемент, - переменной Т, номер столбца - переменной С - C++
Массив С действительных чисел имеет 5 строк и 11 столбцов. Присвоить значение наименьшего элемента массива переменной М1, номер строки, где...

Глобальная переменная - C++
Надо сделать глобальную переменную которая будет видна во всех файлах .cpp Непонятно где ее нужно инициализировать и присваивать...

Глобальная int - C++
Всем привет столкнулся с задачей // это &quot;some.h&quot; using namespace std; int n = 0;


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

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

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