首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >C++全局变量声明

C++全局变量声明
EN

Stack Overflow用户
提问于 2013-11-12 20:49:59
回答 4查看 85.4K关注 0票数 51

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

以下是我尝试的方法:

Variables.h

代码语言:javascript
复制
#ifndef VARIABLES_H // header guards
#define VARIABLES_H

static bool bShouldRegister;

#endif

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

在cpp文件中,我给它赋值::bShouldRegister = truebShouldRegister = true;

在我的另一个cpp文件中,我通过创建一个线程来检查它的值,并在循环中检查它的值(是的,我的线程函数工作得很好)

代码语言:javascript
复制
 while (true)
 {
     if (::bShouldRegister) // Or if (bShouldRegister)
        {
            MessageBox(NULL,"Value Changed","Done",MB_OK|MB_ICONINFORMATION);
        }
  Sleep(100);
 }

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

EN

回答 4

Stack Overflow用户

回答已采纳

发布于 2013-11-12 20:52:13

您必须使用extern,否则您将在每个转换单元中使用可能具有不同值的独立bShouldRegister变量。

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

代码语言:javascript
复制
extern bool bShouldRegister;

将其放入其中一个实现文件(.cpp)中:

代码语言:javascript
复制
bool bShouldRegister;
票数 74
EN

Stack Overflow用户

发布于 2018-08-28 02:58:40

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

代码语言:javascript
复制
// in a header file
inline bool bShouldRegister = true;

有关详细信息,请参阅How do inline variables work?

票数 23
EN

Stack Overflow用户

发布于 2013-11-12 22:10:37

更多的C++-like way是使用static关键字在语法上指示的类成员。类成员变量具有隐式external链接。

代码语言:javascript
复制
#ifndef VARIABLES_H
#define VARIABLES_H

class RegUtil {
public:

    static bool bShouldRegister;

};

#endif

在其中一个cpp文件(可能是variables.cpp)中,您必须定义这个类成员:

代码语言:javascript
复制
#include "variables.h"

bool RegUtil::bShouldRegister;
票数 21
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19929681

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档