以下是相关代码:
#ifndef _ALTERFPS_H
#define _ALTERFPS_H
#include "HUDLuaFunctions.h"
#include "AlterFPSNodes.h"
namespace AlterFPS
{
namespace Globals
{
static bool teamAwareness;
static int teams[] = {0, 0};
static bool getAwareness() {
return teamAwareness;
}
static void setAwareness(bool aware) {
teamAwareness = aware;
}
}
}
#endif
问题是teamAwareness总是错误的。
我断开了getter和setter(我把它们放在那里用于调试目的,我知道这不是Java)并且发现setter确实将变量设置为true,但后续调用getAwareness会显示teamAwareness为false(之间没有setAwareness调用)...这怎么可能?我该如何解决?
答案 0 :(得分:3)
具有静态生命周期的变量始终为零初始化。其中包括:
零初始化,简化,意味着:
但是你的问题与此无关,这是因为你的变量被声明为static
并且它在一个头文件中,所以包含它的每个编译单元(.cpp文件)实际上都看到了它自己的实例变量。如果您从一个.cpp文件更改它,您将看不到另一个.c /更改。
您要做的是在.h文件中声明变量extern
,然后在任何.cpp文件中正常定义它(不带修饰符):
//.h file
namespace Globals
{
extern bool teamAwareness;
inline void setAwareness(bool aware) {
teamAwareness = aware;
}
}
//.cpp file
namespace Globals
{
bool teamAwareness;
}
顺便说一下,函数更好地声明为inline
。