2011-04-14 65 views
0

這應該是一個簡單的問題。我對枚舉沒有太多的瞭解,所以我不完全理解它們是如何工作的。在我的程序中,我試圖在一個枚舉中存儲一個玩家的工作。我需要可以改變作業的功能。我正在嘗試使用switch語句,但它不會改變玩家的工作。在枚舉值之間切換:C++

代碼:

// 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語句中。

+1

你是什麼意思的「它沒有改變」?你返回不同的'job'值,但是忽略了返回值。 – 2011-04-14 15:11:10

+2

什麼是錯誤的行爲?在這裏,我只是看到你總是把工作分配給蘭德曼。 – 2011-04-14 15:11:54

+0

我不知道如何返回工作的新價值......也就是說,我不知道我的switch語句正在做什麼......我希望它能夠返回新的工作,但顯然我的「默認」是趕超它? – Briz 2011-04-14 15:13:19

回答

1

你的邏輯錯了。 switch(job)聲明會將您帶入您的案例聲明。在

case Landman 

您立即返回蘭德曼(因爲你執行你的switch語句之前設置工作,蘭德曼,它總是返回蘭德曼已將其編碼方式),它完全返回你從這個功能。它從不嘗試將工作轉換爲任何其他工作。請注意,您的break語句也永遠不會執行,因爲返回將立即從此函數調用中返回。您可能需要:

case Landman: 
    job = geologist; 
    return job; 

等等等等。此外,你很難將默認的工作案例編碼給蘭德曼。您可能想要作爲變量傳遞,或者從對象中讀出Job的CURRENT值是什麼,然後根據當前值對其進行調整。

+0

嗨J_D,再次。我需要使用什麼邏輯來切換作業? – Briz 2011-04-14 15:16:18

+0

我會在我的代碼中試試這個,並讓你知道它是怎麼回事。 – Briz 2011-04-14 15:17:25

+0

查看我的編輯 - 您需要從玩家表中讀取作業的當前值。然後,在你的switch語句中使用它。開關(currentJob)..然後,如果你碰到地質學家,你可以將你的characterSheet.job改爲Landman。您似乎實際上並未在任何位置捕獲和存儲此作業值,並且您不在_statSheet()調用中存儲函數的返回值。您需要捕獲返回值,或者讓函數直接在內存中更新您的statSheet對象,以便進行更改。 – 2011-04-14 15:20:01

0

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,但您丟棄返回值。

當然,你總是設置job = Landman,這意味着你總是採取通過switch相同的路徑。整個功能相當於return Landman;

+0

呃,我將如何返回新工作? ; _; – Briz 2011-04-14 15:11:07

+0

@Briz:您可能正在尋找一個成員變量,在構造函數中初始化,然後在其他函數中使用。但是你不知道你想做什麼,因爲你沒有描述它,你提供的所有代碼都是你不想要的東西。 – 2011-04-14 15:15:10