【问题标题】:Strange error regarding instance variables & superclass关于实例变量和超类的奇怪错误
【发布时间】:2011-08-24 00:52:13
【问题描述】:

我有一些代码,我的类继承自超类,到目前为止一切正常。每当我尝试使用任何超类变量时,都会出现错误,说它们未声明(在此函数中首次使用)。它只发生在我的一个子类中,并且看起来与其他子类完全相同。我想知道是否有什么明显的我应该知道的(对Objective-C来说很新)。基本代码是这样的 -

@interface mySuperClass : UIViewController {

BOOL myVar;

}

然后-

@interface mySubClass : mySuperClass {

}

@implementation mySubClass {

-(void)someMethod {

    myVar = YES; // error here

}

@end

非常感谢任何帮助 - 如果您需要更多信息,请告诉我!谢谢。

【问题讨论】:

  • 为什么不写出您遇到的确切错误?除了拼写错误和缺少@ends 之外,这也应该有效。发布一个重现问题的最小完整示例。
  • 很难发布任何有意义的东西,因为有很多代码,如果我注释掉变量,程序运行良好(除了变量对其他事物的影响......) .我想这可能是代码中更深层次的东西,但是有这么多我会觉得很难把它们全部发布出来!我将重建整个实现,看看我是否得到同样的东西。正如我所说,其他子类以同样的方式工作正常,我正在努力不把它归结为 XCode 4 错误......
  • 嗯,也许你最终得到了一个奇怪的包含,它在界面中没有实例 var myVar?您可以尝试查看有错误的预处理源文件,以查看mySuperClass 的接口定义在其中的样子?
  • 非常感谢您的所有帮助,但不幸的是,这里的建议都没有找到问题的原因!我已经重新编写了代码(将整个代码复制并粘贴到一个新的.m 中,一点一点地查看是否出现错误),并且一直没有错误。它一定是一个 XCode 错误,可惜我浪费了一天时间和你所有的时间来发现。我要去吃冰淇淋了……

标签: objective-c compiler-errors superclass


【解决方案1】:

我刚刚解决了一个非常相似的奇怪错误,我无法再访问我的超类中的属性,并且 xcode 给了我编译器错误,说“(*)未声明(在此函数中首次使用)”。但是我过去没有任何问题...

问题是我在 .m 文件的顶部引入了拼写错误,而 xcode 编译器输出误导了我。具体来说,我有 @synthesize 语句,其中属性拼写错误,无论是在 synthesize 语句中还是在头文件中的相应变量中。

如果您有@synthesize 语句或其他声明,请用细齿梳检查它们(即您最近引入了哪些行?),或者甚至注释掉其中的一部分,看看您是否可以再次编译并缩小范围罪魁祸首。

再次,编译器错误非常具有误导性,因此调试起来确实很困难。尽管在 99.9% 的情况下,错误都是我自己造成的。 :)

【讨论】:

  • +1 我应该先阅读而不是写作 ;-) 起初并没有意识到重点是什么
  • 我遇到了完全相同的问题,实际上问题是因为我的 @synthesize 方法之一中的拼写错误。
【解决方案2】:

我看不出您粘贴的代码有什么问题。我的第一个猜测是您没有正确导入 mySuperClass .h 文件。即你失踪了

#import "mySuperClass.h"    //or #include

在 mySubClass.h 或 mySubClass.m 中

【讨论】:

    【解决方案3】:

    我遇到了同样的问题,在浪费了几个小时后,我终于在我的项目中解决了它:

    我重构了我的源代码并删除了一个成员,但忘记删除 .h 文件中的 @property 定义。当我使用超级会员时,这会导致每个地方出现错误。顺便说一句:super 的方法很好。

    因此请检查您的属性定义。感谢 post 8 中的螺丝带提供的解决方案 :-)

    编辑:哎呀,克里斯的答案非常相似,除了错别字和删除。

    【讨论】:

      【解决方案4】:

      我连续几周都遇到同样的问题

      "Variable Undeclared" error when compiling to iOS Device, but not for Simulator

      我发现的一个解决方案是将编译器从默认的LLVM GCC 4.2 更改为LLVM Compiler 2.0(或“Apple LLVM Compiler 2.1”)。貌似是编译器的bug,不过只是猜测而已。

      如果您根本不需要使用 GCC 编译器,更改它可以快速解决您的问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2015-04-27
        • 1970-01-01
        • 1970-01-01
        • 2021-07-29
        相关资源
        最近更新 更多