【问题标题】:Syntax error in method declaration: Expected ')' before name方法声明中的语法错误:名称前应为“)”
【发布时间】:2011-05-17 20:12:46
【问题描述】:

我对自己遇到的错误感到非常困惑。我有以下代码:

在 View1.m 我打这个电话:

[iconView addIconWithType:IconTypeStandard];

图标视图.h

typedef enum {
    IconTypeStandard = 0,
    IconTypeNew = 1,
} IconType;

-(void)addIconWithType:(IconType)iconType;

图标视图.m

-(void)addIconWithType:(IconType)iconType {

...

}

图标.h

#import "IconView.h"


@interface Icon : UIView {

}

-(Icon *)initWithFrame:(CGRect)frame;

-(void)type:(IconType)iconType;

那条线在 'IconType'' 之前导致了 'Expected ')' 的错误,但我不知道为什么?

图标.m

-(void)type:(IconType)iconType {

...

}

【问题讨论】:

  • 导致错误的行前面的代码是什么?
  • 也许问题出在这些行之上,比如之前没有终止方法,或者不在 @implementation 块内?
  • 我进行了 -(void) 测试;在该行上方并注释掉有问题的行,然后问题就消失了。所以一定是那条线有​​问题。
  • 可能是把函数名开头的'type'当作关键字或者其他函数名处理?
  • 查看question。我认为声明有问题。

标签: objective-c ios syntax-error


【解决方案1】:

我猜有一个周期性的包含。 Icon.h 指的是IconView.h,反之亦然。由于typedef 出现在Icon.h 中的import 语句之后,因此它会引发错误,因为它还找不到IconType。

您可能应该声明@class IconView; 并将#import "IconView.h" 移动到Icon.m。

【讨论】:

  • Icon.h 必须导入 IconView.h 否则将无法看到 IconType 的 typedef。不过,@class Icon 声明可以放在 IconView.h 中。
  • 我在 cmets 的某处读到,他已将 IconType 声明移至 Icon.h,所以我建议这样做。但这一切现在都完成了。看来问题已经解决了。
【解决方案2】:

你的枚举中有一个尾随逗号

IconTypeNew = 1,    // remove the comma

【讨论】:

  • 我改了,还没修复。
  • C99 允许在最后一个枚举数和右大括号之间使用 trailing comma。
  • 不知道为什么会有这么多的赞成票,因为逗号是完全合法的(请参阅stackoverflow.com/questions/792753/…)。不过,我没有反对。 :)
猜你喜欢
  • 2023-01-07
  • 1970-01-01
  • 2016-11-08
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-03-25
相关资源
最近更新 更多