Объявление глобальной переменной С++


То, что я хочу сделать, это просто определить переменную в файле заголовка и использовать ее на двух разных файлах cpp без переопределения этой переменной каждый раз, когда я включаю заголовок Вот как я пытался:

Variables.h

#ifndef VARIABLES_H // header guards
#define VARIABLES_H

static bool bShouldRegister;

#endif

(Я также пытался использовать extern, но ничего не изменился)

И в файле cpp я даю ему значение ::bShouldRegister = true или bShouldRegister = true;

В моем другом файле cpp я проверяю его значение, создавая поток и проверяя его значение в цикле (и да, моя функция потока работает хорошо)

 while (true)
 {
     if (::bShouldRegister) // Or if (bShouldRegister)
        {
            MessageBox(NULL,"Value Changed","Done",MB_OK|MB_ICONINFORMATION);
        }
  Sleep(100);
 }

И да, этот MessageBox никогда не появляется (bShouldRegister никогда не становится правдой:/)

Ответы

Ответ 1

Вы должны использовать extern, иначе у вас есть отдельный bShouldRegister в каждой единицы перевода, возможно, с разными значениями.

Поместите это в файл заголовка (.h):

extern bool bShouldRegister;

 

Поместите это только в один из файлов реализации (.cpp):

bool bShouldRegister;

Ответ 2

Более С++-подобным способом будет использовать член класса, синтаксически обозначенный ключевым словом static. Переменные члена класса имеют неявное связывание external.

#ifndef VARIABLES_H
#define VARIABLES_H

class RegUtil {
public:

    static bool bShouldRegister;

};

#endif

в одном из ваших файлов cpp (возможно, variables.cpp), вы должны определить этого члена класса:

#include "variables.h"

bool RegUtil::bShouldRegister;

Ответ 3

Вам нужно определить переменную в одном из модулей:

bool bShouldRegister;

Затем объявите его extern (not static!) в заголовке:

extern bool bShouldRegister;

Ответ 4

Если вы можете использовать С++ 17, рассмотрите возможность использования встроенной переменной:

// in a header file
inline bool bShouldRegister = true;

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

Ответ 5

Здесь вам нужно определить bool bShouldRegister в одном классе. Ваш файл заголовка должен понравиться.

 #ifndef VARIABLES_H // header guards
#define VARIABLES_H

class abc{

public:
      bool bShouldRegister;
      abc();
#endif

Теперь инициализируйте переменную bShouldRegister в файле cpp в конструкторе класса abc, а затем используйте эту переменную во втором файле cpp, используя объект класса. Вы получите сообщение.