我正在用 C++ 编程,并且有一个使用静态变量的方法。该方法没有按我认为的那样工作;经过调查,我发现我的静态变量在两个地方以红色突出显示,在其他地方以蓝色突出显示。下面是代码:
int GameModeState::changeJob(int number)
{
static int job = 1; //red
if (number == 1)
{
job = (job+1); //First one is red, second one is blue
return job; //blue
} else {
return job; //blue
}
}
我用其他方法调用此方法,例如:
int GameModeState::getJob()
{
int currentJob = (changeJob(2));
return currentJob;
}
我想要一种方法,例如getJob()
简单地返回 的当前值job
,而另一种方法在调用 changeJob(number) ischangeJob(1)
时,将作业的值加一。(因此是 if/else 中的语句changeJob(number)
)。由于job
变量的突出显示方式不同,我认为编译器是在说它以某种方式分别查看两者?我被困job
在了一些平均价值上。
编辑我也有 Awesomium ......我相信这是编译器的唯一补充,但我不完全确定。
MOAR EDIT在另一堂课中,我有一个方法应该确定当前工作的编号,并根据该数字是偶数还是奇数做一些事情(因为现在只有两个工作)
void ZoneMovementState::_changeZone(const String& message, const Awesomium::JSValue& input, Awesomium::JSValue& output)
{
//Awesomium::JSValue::Object object = input.getObject();
//String zoneFilename = Convert::toString(object[L"zoneFilename"].toString());
// If the number from getJob is even, the player is currently a geologist
if (GameModeState::getJob()%2 == 0)
{
ZoneParser::getSingleton().load("../media/zones/geology_zone.xml", false);
} else {
ZoneParser::getSingleton().load("../media/zones/farm_zone.xml", false);
}
transitionHandler->go();
}
忽略两个注释掉的行;他们处理 JS,我现在不处理。在程序中,我可以farm_zone
使用以下方法访问直到我增加作业的值GameModeState
:
void GameModeState::_openNotebook(const String& message, const Awesomium::JSValue& input, Awesomium::JSValue& output)
{
mNotebookTransition->go();
static int currentJob = changeJob(1);
}
....所以我想出了我的问题。在浏览代码向你们展示时,我意识到静态 forcurrentJob
可能是不需要的......一旦我删除它,我的代码就可以正常工作了。
谢谢你们的帮助!