声明和初始化全局变量

7 浏览
0 Comments

声明和初始化全局变量

也许这是基本的知识,我很抱歉。

我有一个名为CTemp.h的头文件,其中包含CTemp命名空间:

namespace CTemp
{
    bool bFlag;
};
#ifndef _CTEMP
#define _CTEMP
bool CTemp::bFlag = true;
#endif 

如果我将CTemp.h包含到我的cpp文件中,并尝试使用CTemp::bFlag

bool bb = CTemp::bFlag;

编译器会报错"redefinition"

我确信应该将初始化放在.cpp文件中,但我找到了一种只使用.h文件解决的方法。因为我不想将.cpp文件添加到我的项目中。

我认为可以使用预处理指令#ifdef...来解决它。

感谢您的建议。

0
0 Comments

全局变量的声明和初始化问题

问题是bool bFlagbool CTemp::bFlag = true;都是定义。换句话说,当你写下bool bFlag = true;时,你正在第二次定义bFlag

解决方法

为了解决这个问题,你可以使用extern关键字。

someheader.h中:

#ifndef _CTEMP
#define _CTEMP
namespace CTemp
{
    extern bool bFlag; //这是一个声明而不是定义
};
#endif

somesource.cpp中:

#include "someheader.h"
bool CTemp::bFlag = true; //这是一个定义

0
0 Comments

全局变量的声明和初始化是一个常见的问题,特别是在C++中。通常情况下,我们希望在头文件中声明变量,并在源文件中进行定义和初始化。然而,如果不正确地处理全局变量的声明和初始化,就会出现一些问题。

在上面的代码示例中,我们可以看到两种处理全局变量声明和初始化的方法。

第一种方法是在头文件中声明变量,然后在一个单独的源文件中定义变量并进行初始化。在头文件中,我们使用了关键字"extern"来声明变量,表示我们只是声明变量,而不进行定义和初始化。在源文件中,我们使用了"#include"指令来包含头文件,并且使用了全局作用域运算符"::"来定义变量并进行初始化。

第二种方法是将变量定义为"inline"。在头文件中,我们使用了关键字"inline"来定义变量,并进行了初始化。在这种情况下,我们不需要在源文件中再次定义变量。需要注意的是,尽管"inline"定义的变量不再需要在源文件中进行定义,但它仍然是全局变量。

这两种方法都可以解决全局变量声明和初始化的问题,具体使用哪种方法取决于实际需求和编程风格。

总之,正确处理全局变量的声明和初始化是非常重要的,特别是在C++中。使用"extern"关键字和源文件中的定义来实现声明和初始化,或者使用"inline"关键字在头文件中直接定义和初始化变量,可以有效地解决这个问题。

0