C ++全局变量声明

时间:2013-11-12 12:49:59

标签: c++ variables global-variables


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

Variables.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永远不会成真:/)

5 个答案:

答案 0 :(得分:49)

您必须使用extern,否则您在每个翻译单元中都有单独的bShouldRegister,其值可能不同。

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

extern bool bShouldRegister;

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

bool bShouldRegister;

答案 1 :(得分:17)

更像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;

答案 2 :(得分:9)

您需要在其中一个模块中定义变量:

bool bShouldRegister;

然后在标题中声明extern(不是static!):

extern bool bShouldRegister;

答案 3 :(得分:6)

如果可以使用C ++ 17,请考虑使用内联变量:

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

有关更多信息,请参见How do inline variables work?

答案 4 :(得分:-1)

在这里,您需要在一个类中定义bool bShouldRegister。您的头文件应该是这样的。

 #ifndef VARIABLES_H // header guards
#define VARIABLES_H

class abc{

public:
      bool bShouldRegister;
      abc();
#endif

现在在abc类的构造函数中初始化cpp文件中的 bShouldRegister 变量,然后使用class的对象在第二个cpp文件中使用此变量。您将收到消息框。