Как объявить глобальную переменную, которая может быть использована во всей программе
У меня есть переменная, которую я хотел бы использовать во всех моих классах, без необходимости передавать ее конструктору класса каждый раз, когда я хотел бы использовать его. Как я могу выполнить это на С++?
Спасибо.
Ответы
Ответ 1
global.h
extern int myVar;
global.cpp
#include "global.h"
int myVar = 0; // initialize
class1.cpp
#include "global.h"
...
class2.cpp
#include "global.h"
...
class3.cpp
#include "global.h"
...
MyVar будет известен и может использоваться в каждом модуле как глобальная переменная. Вам не обязательно иметь global.cpp. Вы можете инициализировать myVar в любом из классов .cpp, но я думаю, что это более чисто для больших программ.
Ответ 2
Если вы не собираетесь использовать шаблон Singleton, как предлагает Lyndsey, то, по крайней мере, используйте глобальную функцию (внутри пространства имен) для доступа к переменной. Это даст вам более гибкое представление о том, как вы управляете этим глобальным объектом.
// mymodule.h
namespace mynamespace // prevents polluting the global namespace
{
extern int getGlobalVariable();
}
// mymodule.cpp
namespace mynamespace
{
int myGlobalVariable = 42;
int getGlobalVariable()
{
return myGlobalVariable;
}
}
Ответ 3
Хотя я бы хотел избежать глобальных переменных, таких как чума, поскольку наше программное обеспечение не может быть многопоточным из-за высокой зависимости от глобальных переменных, у меня есть некоторые предложения:
Используйте Singleton. Это позволит вам сохранить код и получить доступ к нему. Часть проблемы с глобальной переменной заключается в том, что вы не знаете, какой код ее модифицировал. Вы можете установить значение global где-нибудь в своей функции, полагаясь на надежду, что никто другой не изменит его, а будет функционировать ваши кодовые вызовы, fooA, изменяет его, и теперь ваш код будет a) сломан и b) трудно отлаживать.
Если вам нужно использовать глобальную переменную, не касаясь шаблона singleton, посмотрите на ответ fupsduck.
Ответ 4
Просто объявите его вне класса:
Заголовочный файл:
extern int x;
class A {
int z;
public:
A() : z(x++) {}
};
Один исходный файл:
int x = 0;
Ответ 5
ключевое слово extern
//file1.cpp
int x = 0;
//file1 continues and ends.
//file2.cpp
extern int x; //this gets tied into file1.cpp x at link time.
//file2.cpp goes on and ends
Ответ 6
Объявите переменную как extern
в общем заголовке.
Определите его в любом исходном файле.
Ответ 7
если вы хотите объявить его в разных файлах заголовков /cpp, просто объявите его extern
за пределами других файлов
//file1.c
int x=1;
int f(){}
//file2.c
extern int x;
Ответ 8
// L.hpp
struct L { static int a; };
// L.cpp
int L::a(0);