item
в gotoLowerLevel
- локальная переменная, даже если это ссылка на объект в другом месте.Чтобы изменить cnsle->currentState
, вам необходимо:
- передать
cnsle
- передать ссылку на
cnsle->currentState
(то есть изменить сигнатуру метода на Menu ** itemptr
ипараметр вызова &cnsle->currentState
) - или вернуть новое значение из
gotoLowerLevel
и присвоить его: cnsle->currentState = gotoLowerLevel(cnsle->currentState)
Моим предпочтением будет последний вариант, так как это делаетпри чтении вызывающего кода становится ясно, что currentState
может быть изменено.
Другие объяснили, как передать ссылку.Код для моих предпочтительных решений:
Menu* gotoLowerlevel(Menu *item)
{
if (item->chld != 0x00) {
item = item->chld;
}
return item;
}
/* .... */
cnsle->currentState = gotoLowerlevel(cnsle->currentState);