我想要做的只是在头文件中定义一个变量并在两个不同的cpp文件上使用它,而不是在每次包含该头文件时重新定义该变量
这是我尝试的方式:
Variables.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);
}
是的,MessageBox永远不会出现(bShouldRegister永远不会成真:/)
答案 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文件中使用此变量。您将收到消息框。