2011-03-28 41 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