[英]Switching between enum values : C++
希望這應該是一個簡單的問題。 我沒有太多處理枚舉,所以我不完全了解它們的工作原理。 在我的程序中,我試圖將玩家的工作存儲在枚舉中。 我需要可以更改作業的功能。 我正在嘗試使用switch語句,但是它並沒有改變玩家的工作。
碼:
// if change is True, change the job. If false, simply return the current value
int GameModeState::changeJob(bool change)
{
int job = Landman; // Default job is landman
if (change == true)
{
switch(job)
{
case Landman:
return job;
break;
case Geologist:
return job;
break;
default:
job = Landman;
return job;
break;
}
}
else
{
return job;
}
}
// when the player opens the stat sheet, it should change their job
void GameModeState::_statsheet()
{
changeJob(true);
}
換工作我做錯了什么? 我認為問題出在switch語句中。
你的邏輯是錯誤的。 switch(job)
語句將您帶入case語句。 在里面
case Landman
您立即返回Landman(因為在執行switch語句之前將作業設置為Landman,它將始終以您編碼的方式返回Landman),這將使您完全從該函數返回。 它從不嘗試將作業更改為任何其他作業。 請注意,決不會執行break語句,因為return會立即從此函數調用中返回您。 您可能想要這樣:
case Landman:
job = geologist;
return job;
等等等等。 此外,您正在將默認的工作案例硬編碼為Landman。 您可能想要作為變量傳遞,或從對象中讀出Job的當前值在播放器表上的大小,然后根據其當前值進行調整。
switch語句很好。 您有一堆無用的break語句,但是沒有引起問題(除了使代碼的可讀性降低之外)。
這就是問題:
// if change is True, change the job. If false, simply return the current value
job
是一個局部變量,設置它的唯一作用是以后的return job;
聲明。 您的評論應為:
// if change is true, return the new job. If false, simply return the current value
返回了job
的新值IS,但是您放棄了該返回值。
當然,您始終設置job = Landman
,這意味着您始終通過switch
job = Landman
相同的路徑。 整個功能等效於return Landman;
。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.