Как объявить глобальную переменную, которая может быть использована во всей программе

У меня есть переменная, которую я хотел бы использовать во всех моих классах, без необходимости передавать ее конструктору класса каждый раз, когда я хотел бы использовать его. Как я могу выполнить это на С++?

Спасибо.

Ответы

Ответ 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);