调用继承的方法会导致警告,而不会强制转换为超类

时间:2011-08-21 21:32:09

标签: objective-c inheritance casting compiler-warnings

我有以下继承树:

NSObject <- GameObject <- RenderableObject <- SimpleBullet

GameObject有一个名为bounds的方法,它返回对象的边界。在我的代码中,我有SimpleBullet调用bounds来获取其边界,我收到一条警告,说bounds在几个地方被定义;奇。如果我将SimpleBullet转换为GameObject并调用bounds方法,则一切都按预期工作。发生了什么?我无法弄清楚这种行为。例如:

SimpleBullet* bullet = bulletInstance;
[bullet bounds];    // we get the warning.
[(GameObject*)bullet bounds];    // works as expected.

正如我所说,bounds方法是在GameObject中定义的,但为什么Obj-C不知道SimpleBulletGameObject并且不允许我打电话它的方法没有警告?

2 个答案:

答案 0 :(得分:3)

经过一番调查后,我设法知道发生了什么。编译器正在玩弄我,因为没有报告一个有意义的错误。问题是我没有导入/包含SimpleBullet.h。宣布了前瞻性声明,但不是真正的实施。

这使我认为默认编译器将其视为id对象,并尝试在所有适合调用签名的已注册类中查找方法。只是一个猜测,不确定这个:)。

感谢您的帮助。

答案 1 :(得分:1)

UIView也有-bounds方法。确保您的方法具有相同的返回类型。