2011-03-28 36 views
0

這不是一個cocos2d問題,而是更多關於Objective-C的問題。cocos2d CCMenu如何訪問基類的私有成員變量而沒有任何錯誤?

有兩個類CCNode和CCMenu。 CCNode是CCMenu的祖先。 CCMenu直接訪問CCNode的私有成員變量children_,但沒有得到任何錯誤(或警告)。

我們注意到這個問題,當我們嘗試子類化CCMenu,並在派生類中做類似的事情訪問children_。 Xcode在爲模擬器構建時沒有拋出任何錯誤,但它拋出錯誤,說'children_'未聲明。 (這是有道理的!)

所以我真的很迷茫.. 它看起來並不像任何編譯器相關設置(cocos2d的,沒有任何問題的編譯莫名其妙。)

回答

0

望着CCNode頭,children_似乎不是私人的。 CCNode接口沒有任何可見性修飾符,並且默認爲@protected,因此實例變量應爲對CCNode的子類可見。

+0

謝謝。我認爲這是@私人的......所以這是我的錯誤。那麼,我該如何解釋CCMenu派生類的編譯錯誤?它仍然沒有任何意義.. – Todd 2011-03-30 04:09:31

+0

嗯..我注意到,如果從未覆蓋的方法訪問children_,則會發生此錯誤。如果我嘗試從重寫的方法訪問它,那麼沒有錯誤。我期待着與C++類似的行爲,但我想不是。這是@保護成員應該如何工作? – Todd 2011-03-30 04:16:33

+0

我現在感到困惑..我寫了一個簡單的基類和派生類,它編譯得很好。我不知道爲什麼特定的CCMenu派生類會拋出一個錯誤。有關更多信息,我已經在派生類中複製了 - (CCMenuItem *)itemForTouch:(UITouch *)touch(實現),並且children_出錯。 – Todd 2011-03-30 04:38:12