私はC++でプログラミングしていて、静的変数を使用するメソッドがあります。この方法は、私が思うように機能していません。調査したところ、静的変数が2つの場所で赤で強調表示され、他の場所で青で強調表示されていることがわかりました。以下はコードです:
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)を呼び出すときに別のメソッドがである場合はchangeJob(1)
、ジョブの値を1つインクリメントします。(したがって、のif / elseステートメントchangeJob(number)
)。変数の強調表示が異なるためjob
、コンパイラーは2つを別々に表示していると言っていると思いますか?私はjob
いくつかの均等な価値で立ち往生しています。
編集私もAwesomiumを持っています...コンパイラへの唯一の追加だと思いますが、完全にはわかりません。
MOAR EDIT別のクラスでは、現在のジョブの数を判別し、その数が偶数か奇数かに基づいて何かを実行するメソッドがあります(現在は2つのジョブしかないため)
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();
}
コメント付きの2行は無視してください。彼らは私が今は取り組んでいない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
はおそらく不要であることに気付きました...一度削除すると、コードは正常に機能するようになります。
助けてくれてありがとう!