【发布时间】:2011-06-18 09:08:14
【问题描述】:
我有几个类是一个 Layer 类的子类。由于某种原因,其中一个子类的行为不同。这是一个精简版:
@interface Layer: CCLayer
{
GameScene* _scene;
CCNode* _layerNode;
}
@end
#import "Layer.h"
@interface UILayer: Layer
{
}
@end
@implementation UILayer
-(void) doStuff
{
[_layerNode addChild:[CCNode node]]; <---gives compile error: "_layerNode was not declared in this scope"
[_scene playSound];<------gives compile error: "_scene was not declared in this scope"
}
@end
我认为这可以理解基本概念。我可以通过这样做来解决这个问题
[[_self _layerNode] addChild:[CCNode node]];
[[_self _scene] playSound];
但我想不通的是为什么Layer的其他子类可以直接访问_layerNode和_scene?我猜这是构建设置的问题。此外,仅当我为设备(iphone)而不是模拟器构建它时才会发生此问题。如果您需要更多信息来回答,请告诉我。
编辑:
哎呀,我写错了。它应该是[[self _layerNode] addNode:[CCNode node]],但我想问题是为什么一个子类可以直接访问 ivar _layerNode 而另一个必须使用[self _layerNode] 访问它。就像UILayer找不到超类头
【问题讨论】:
-
您要么需要发布真实代码,要么发布一个在编译时会导致问题的最小示例。如所写,(a)该代码应该可以正常编译,但(b)
_self没有意义。如上所述,这听起来像是一个潜在的编译器错误。
标签: iphone objective-c xcode inheritance scope