52


我想要做的只是在头文件中定义一个变量并将其用于两个不同的 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 永远不会成为真:/)

4

5 回答 5

76

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

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

extern bool bShouldRegister;

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

bool bShouldRegister;
于 2013-11-12T12:52:13.467 回答
23

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

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

请参阅内联变量如何工作?了解更多信息。

于 2018-08-27T18:58:40.403 回答
21

类似于 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;
于 2013-11-12T14:10:36.683 回答
10

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

bool bShouldRegister;

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

extern bool bShouldRegister;
于 2013-11-12T12:52:11.343 回答
-3

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

 #ifndef VARIABLES_H // header guards
#define VARIABLES_H

class abc{

public:
      bool bShouldRegister;
      abc();
#endif

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

于 2015-06-13T19:18:50.177 回答