可修改的全局变量c ++

时间:2017-01-29 02:52:52

标签: c++ global-variables

我需要在包含一系列全局变量的多个CPP文件中包含头文件。但我遇到的问题是我似乎无法使变量可修改。我可以在头文件或任何cpp文件中初始化变量,但是当我来更改它时,它要么不编译,要么创建变量的2个实例,这些实例超出了一个和另一个的范围。我需要一种方法来改变函数中的值。

使用static的示例(它创建超出其他变量范围的变量的实例)

#pragma once

namespace SCE
{
static bool SC_DEBUG = false;
static bool VSYNC = true;
static int SC_LOG_LEVEL = 3;
}

我也试过使用'extern',但我也没有运气。

    #pragma once

namespace SCE
{
    extern bool SC_DEBUG;
    extern bool VSYNC;
    extern int SC_LOG_LEVEL;
}

修改 我收到错误“错误LNK2001:未解析的外部符号”bool SCE :: VSYNC“(?VSYNC @ SCE @@ 3_NA)”,当我尝试使用extern创建变量时编辑变量。我尝试编辑它的方式就是这样

int main()
{
    SCE::VSYNC = false;
    // ...
}

解决方案 我正在使用多项目设置。所以发生的事情是'Project B'包含全局变量头文件和cpp,而'Project A'试图在设置后更改值。现在出于某种原因,由于'Project A'只是拉动全局变量头文件,它获取变量定义但看不到变量的初始化,从而引发了一系列奇怪的错误。

2 个答案:

答案 0 :(得分:0)

在头文件中使用extern定义变量:

// globals.h
namespace SCE
{
    extern bool SC_DEBUG;
    extern bool VSYNC;
    extern int SC_LOG_LEVEL;
}

并在实现文件中定义它们:

// globals.cpp
namespace SCE
{
    bool SC_DEBUG = false;
    bool VSYNC = true;
    int SC_LOG_LEVEL = 3;
}

现在您可以将标题包含在其他文件中。

答案 1 :(得分:0)

你的问题有点不清楚。看来你面临着静态变量的问题。静态变量即使超出范围也能够保留它们的值。它们保留在内存中直到程序运行。例如。

#include<stdio.h>
static int i = 0;
int fun()
{
     i= i+5;
}

int main()
{
     fun();
     printf("%d ", i);
     i= 10,
     printf("%d ", i);
     return 0;
}

输出:5 10