Я программирую на 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 (число) равен changeJob(1)
, чтобы увеличить значение задания на единицу.(Следовательно, оператор if / else в changeJob(number)
).Поскольку переменные job
подсвечиваются по-разному, я думаю, что компилятор говорит, что он как-то просматривает два отдельно?Я застреваю с job
, являющимся некоторым четным значением.
EDIT У меня также есть 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);
}
.... Итак, я решил свою проблему.Проходя через код, чтобы показать вам, ребята, я понял, что статика для currentJob
, вероятно, была ненужной ... как только я удалил ее, мой код работает, как и сейчас.
Спасибо за помощь, ребята!