我需要在包含一系列全局变量的多个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