可修改全局变量c++



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

使用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;
// ...
}

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

在头文件中用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;
}

现在,您可以将标头包含到其他文件中。

您的问题不太清楚。您似乎面临着静态变量的问题。静态变量即使超出范围也能够保持其值。它们保留在内存中直到程序运行。例如

#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

相关内容

  • 没有找到相关文章

最新更新