我需要在包含一系列全局变量的多个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'只是拉动全局变量头文件,它获取变量定义但看不到变量的初始化,从而引发了一系列奇怪的错误。
答案 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