1

我是 Objective-C 的新手,在 GNUstep 和 MinGW 环境中工作。我正在编译这段代码但有一个错误:

#import "Foundation/Foundation.h"

@interface C : NSObject
{
    float f;
}

- (void) gamerHell: (NSString *) name : (NSString *) lastName ;

@end

@implementation C

- (void) gamerHell: (NSString *) firstName : (NSString *) lastName {

    NSLog(@"Welcome, %s %s",firstName,lastName);
}

@end

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

    NSAutoReleasePool * pool = [[NSAutoReleasePool alloc] init];

    C *ob = [[C alloc] init];
    [ob gamerHell: @"SHAN" : @"UL HAQ"];

    [ob release];

    [pool drain];
    return 0;
}

它给出了这样的编译时错误:

'NSAutoReleasePool' 未声明(在此函数中首次使用)

我应该怎么做才能克服这个错误?

4

3 回答 3

6

尝试使用NSAutoreleasePool代替NSAutoReleasePool(使用小写字母r)。

于 2009-08-16T16:22:36.557 回答
6

亚当解决了您报告的问题,您的班级名称有误。但是,您还会遇到一些其他问题,我认为了解这些问题会有所帮助。

  • 您的方法打破了几个 Objective-C 约定,这些约定将使您的代码可读性降低,并使试图帮助您的人感到困惑,即:
    • 匿名选择器片段从来都不是一个好主意。始终在每个冒号前使用描述性名称。
    • 更好的签名将是- (void) hellowWithFirstName:(NSString*)firstName lastName:(NSString*)lastName;
    • 我强烈建议在方法声明和定义中使用相同的形式参数名称。(您在一个中使用“name”,在另一个中使用“firstName”。)如果您选择以不同的方式命名它们,请确保头文件中的那个是经过深思熟虑的,因为这是人们将编码的公共接口。
  • 我假设您选择了比“C”更好的类名,并且只是将其用作演示目的的占位符。对类命名要特别小心,因为 Objective-C 没有用于“唯一”类的包或命名空间。

我了解您是 Objective-C 的新手,这些都是刚学习该语言的人的常见烦恼。因此,请将这些观点视为友好的建议,而不是严厉的批评。

于 2009-08-16T17:44:00.387 回答
0

从切换

NSAutoReleasePool * pool = [[NSAutoReleasePool alloc] init];

NSAutoReleasePool *pool = [[NSAutoReleasePool alloc] init];

删除 * 后的空格为我处理了错误消息。

于 2010-02-05T01:16:48.730 回答