2012-01-20 29 views

回答

3

gotoLowerLevelitem是一個局部變量,即使它是在別處的對象的引用。要修改cnsle->currentState您需要:

  • 傳中cnsle
  • 傳遞一個參考cnsle->currentState(即改變方法簽名Menu ** itemptr和呼叫參數&cnsle->currentState
  • 或返回新值從gotoLowerLevel併爲它分配:cnsle->currentState = gotoLowerLevel(cnsle->currentState)

我的選擇將是最後的選擇,因爲讀取調用代碼,當這清楚可能會被修改。

其他人已經解釋瞭如何傳遞參考。代碼我的首選解決方案是:

Menu* gotoLowerlevel(Menu *item) 
{ 
    if (item->chld != 0x00) { 
     item = item->chld; 
    } 
    return item; 
} 

/* .... */ 
cnsle->currentState = gotoLowerlevel(cnsle->currentState); 
+0

您可能還想檢查NULL –

2

您正在按值傳遞指針。在對象上

操作它指向的將是可見的外面,但指針本身只是一個副本。

您可能想要使用指向指針的指針。