簡體   English   中英

在枚舉值之間切換:C ++

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM