繁体   English   中英

C++ 全局变量声明

[英]C++ Global variable declaration


我想要做的只是在头文件中定义一个变量并在两个不同的 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);
 }

是的,MessageBox 永远不会出现(bShouldRegister 永远不会成为真:/)

您必须使用extern ,否则您将在每个翻译单元中使用可能不同的值分隔bShouldRegister变量。

将其放在头文件 (.h) 中:

extern bool bShouldRegister;

把它放在一个实现文件 (.cpp) 中:

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 文件中使用此变量。 你会得到你的消息框。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM