0

我只是在学习 obj c。我正在使用从 gnustep.org/experience/Windows.html 下载的 GNUStep(有 3 个安装程序 - msys 系统、核心、开发)。

运行以下代码:

#import <Foundation/Foundation.h>

int main (int argc, char *argv[]) {

    NSAutoreleasePool * pool = [[NSAutoreleasePool alloc] init];
    NSDictionary *m_Dict =
    [NSDictionary dictionaryWithObjectsAndKeys:
      @"ABC", @"One",
      @"DEF", @"Two",
      @"GHI", @"Three",
      nil ];

    // Print all key-value pairs from the dictionary

    [m_Dict enumerateKeysAndObjectsUsingBlock: ^(id key, id obj, BOOL *stop) {
        NSLog(@"%@ => %@", key, obj);
        }];

    [pool drain];
    return 0;
}

显示错误:

$ gcc -o c c.m -I /GNUstep/System/Library/Headers -L /GNUstep/System/Library/Li
``braries -lobjc -lgnustep-base -fconstant-string-class=NSConstantString
c.m: In function 'main':
c.m:16:44: error: expected expression before '^' token
c.m:18:1: warning: 'NSDictionary' may not respond to '-enumerateKeysAndObjectsUs
ingBlock:' [enabled by default]
c.m:18:1: warning: (Messages without a matching method signature [enabled by def
ault]
c.m:18:1: warning: will be assumed to return 'id' and accept [enabled by default
]
c.m:18:1: warning: '...' as arguments.) [enabled by default]c

请提出我做错了什么。在 Stackoverflow 上也搜索过,但找不到太多帮助。

4

1 回答 1

0

您的编译器不支持块。您需要使用现代的clang.

确实,如果您学习 Objective-C 的目的是为 Mac 或 iPhone/iPad 编写代码,那么第一步需要购买 Mac 并安装 Xcode。如果您学习使用较旧的编译器,您将错过语言功能,并且您需要重新学习以后使用的模式。

在购买 Mac 之前查看 Mountain Lion 的要求。从技术上讲,您可以在 Lion 上运行最新的 Xcode,但我认为 Apple 不会长期保持兼容。

或者,如果您只是想学习 Objective-C,则需要弄清楚您可以使用该语言的哪个子集。不过,我建议这在 iOS/Mac 开发之外并不是非常有用。

于 2013-04-07T15:38:47.170 回答