Объявление глобальной переменной С++
То, что я хочу сделать, это просто определить переменную в файле заголовка и использовать ее на двух разных файлах 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, используя объект класса. Вы получите сообщение.