C++ 全局变量声明
C++ Global variable declaration
我想做的只是在头文件中定义一个变量并在两个不同的 cpp 文件上使用它,而无需在每次包含该标头
时重新定义该变量这是我尝试的方式:
变量.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);
}
是的,该消息框永远不会出现(bShouldRegister永远不会得到真:/)
你应该使用extern
否则你将在每个翻译单元中用可能不同的值分隔bShouldRegister
变量。
将其放在头文件 (.h) 中:
extern bool bShouldRegister;
将其放入其中一个实现文件 (.cpp):
bool bShouldRegister;
<小时 />另一种更简单的方法是使用inline
关键字。将变量放在头文件中,如下所示:
inline bool bShouldRegister;
如果可以使用 C++17,请考虑使用内联变量:
// in a header file
inline bool bShouldRegister = true;
有关详细信息,请参阅内联变量如何工作?
一种
更C++的方式是使用类成员,语法上由 static
关键字指示。类成员变量具有隐式external
链接。
#ifndef VARIABLES_H
#define VARIABLES_H
class RegUtil {
public:
static bool bShouldRegister;
};
#endif
在其中一个 cpp 文件(可能是 variables.cpp
)中,您必须定义此类成员:
#include "variables.h"
bool RegUtil::bShouldRegister;
您需要在其中一个模块中定义变量:
bool bShouldRegister;
然后在标头中声明它extern
(不是static
!):
extern bool bShouldRegister;
在这里你需要在一个类中定义bool bShouldRegister。您的头文件应如下所示。
#ifndef VARIABLES_H // header guards
#define VARIABLES_H
class abc{
public:
bool bShouldRegister;
abc();
#endif
现在在 abc 类的构造函数中初始化 cpp 文件中的 bShouldRegister 变量,然后使用类的对象在第二个 cpp 文件中使用此变量。你将得到你的消息框。
相关文章:
- 将变量声明为全局变量,然后声明为局部变量 -Shadowing-
- 将静态全局变量声明为内联有什么意义吗?
- 我真的可以使用 Type 的每个声明创建一个全局变量吗?
- 声明为类字段而不是全局变量
- 有什么理由C++ 11+ std::mutex 应该声明为全局变量,而不是作为函数参数传递到 std::thread 中
- 在结构声明的分号之前声明的结构变量是否为全局变量
- 困惑,为什么没有在此范围内声明 c++ 全局变量
- 使用静态和避免单例模式声明全局变量
- 声明全局变量 <vector>,代码将无法成功运行
- 即使在定义类后也无法在C++中声明全局变量?
- 查找声明全局变量的文件
- 我应该如何在我的C++项目中声明全局变量
- 使用预处理器技巧定义和声明全局变量
- 如何在C++中声明全局变量
- 在c++中声明全局变量时出现问题
- 声明全局变量,在方法中初始化
- 在C中声明全局变量会改变入口点吗?
- 在这种情况下,如何声明全局变量
- 声明全局变量<vector>问题
- 在C++中定义和声明全局变量