C++ 全局变量声明

C++ Global variable declaration

本文关键字:声明 全局变量 C++      更新时间:2023-10-16


我想做的只是在头文件中定义一个变量并在两个不同的 cpp 文件上使用它,而无需在每次包含该标头
时重新定义该变量这是我尝试的方式:

变量.h

#ifndef VARIABLES_H // header guards
#define VARIABLES_H
static bool bShouldRegister;
#endif

(我也尝试了extern,但没有任何变化)

在 cpp 文件中,我给它一个值::bShouldRegister = truebShouldRegister = 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 文件中使用此变量。你将得到你的消息框。