我用C++編程,並有一個使用靜態變量的方法。該方法並不如我認爲的那樣工作;經過調查,我發現我的靜態變量在兩個地方以紅色突出顯示,而在其他地方顯示爲藍色。下面是代碼:Visual Studio編譯器突出顯示靜態變量的不同?
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。 (因此,changeJob(number)
中的if/else語句)。 由於job
變量以不同的方式突出顯示,我在想編譯器在說它以某種方式分別查看這兩個變量?我陷入了job
甚至有些價值。
編輯我也有Awesomium ...我相信這是編譯器的唯一補充,但我不完全確定。
MOAR編輯在另一類,我應該確定當前工作的數量和做基礎的東西,如果數量爲偶數或奇數(因爲現在只有兩個作業)
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
的靜態可能不需要了......一旦我將其刪除,我的代碼就會像現在這樣運行。
感謝您的幫助!
你爲什麼使用本地靜態變量而不是類成員變量? – Erik 2011-04-08 14:48:43
因爲我不知道什麼成員變量是?我是一名新手C++程序員。 – Briz 2011-04-08 14:50:44
Visual Studio不應該突出顯示其中任何一個。你已經安裝了什麼pulgin? – JaredPar 2011-04-08 14:51:57