【问题标题】:Expected identifier or '(' objective C预期标识符或 '(' 目标 C
【发布时间】:2013-10-01 08:37:51
【问题描述】:

刚开始使用Objective C,所以请保持温和。我有一个类如下:

卡.h

#import <Foundation/Foundation.h>

@interface Card : NSObject
@property (nonatomic) NSUInteger x;
-(NSUInteger) getNum;
@end

卡.m

#import "Card.h"

@implementation Card
-(NSUInteger) getNum {
    return self.x;
}    
@end

main.c

#include <CoreFoundation/CoreFoundation.h>
#include "Card.h"

int main(int argc, const char * argv[])
{
    return 0;
}

当我编译时,我得到了很多错误,第一个是:

NSObjCRuntime.h:解析问题:预期标识符或“(”。

我知道这很愚蠢 - 只是希望这里有人能发现我做错了什么。

【问题讨论】:

  • Objective-C 中的常见约定是 not 在 getter 前加上“get”,而是简单地将它们命名为要获取的属性。此外,拼写全名也是惯例。在您的情况下,getNum 将写为number
  • 感谢@David 的指点。我想约定很重要。在这种情况下,我纯粹是在创建一个测试方法,但我同意你的观点。

标签: objective-c


【解决方案1】:

您实际上是在使用 Objective C 编译器进行编译吗?指示 GCC 和 clang 使用 ObjC 的传统扩展名是 .m(不是 .c)。

【讨论】:

  • 我刚刚在 Xcode 中创建了一个 OSX“命令行工具”,它为我创建了 main.c。它实际上导入了 CoreFoundation(我在测试中更改了它)。我使用新的文件菜单创建了类 Deck。我也在 XCode 中构建它。
  • 看起来您可能创建了一个 C 项目,而不是 Objective C。当我创建一个测试应用程序时,我得到“Main.m”,一个 Objective C 文件。编译器抱怨是因为 Foundation.h 是一个 Objective C 头文件,但您在纯 C 文件 (main.c) 中使用它。
  • 有道理!奇怪的是,Xcode 允许“命令行工具”无法导入目标 c 类......除非有办法?
  • 您可以配置它来创建一个。使用 XCode 5,确保命令行项目的“类型”设置为“基础”。或者,您可以在项目完成后更改项目(但更繁琐)。
  • 谢谢@Adam - 这已经回答了我的问题。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2012-03-16
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2013-06-08
相关资源
最近更新 更多