ObjectiveUs C关于GNUstep AutoReleasePool未声明的问题

时间:2009-08-16 16:18:12

标签: objective-c memory-management compiler-errors autorelease gnustep

我是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'未声明(首次在此函数中使用)

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

3 个答案:

答案 0 :(得分:6)

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

答案 1 :(得分:6)

Adam确定了您报告的问题,您在班级名称中输入了一个拼写错误。但是,你会遇到一些其他问题,我认为这有助于了解它。

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

我理解你是Objective-C的新手,这些对于刚学习语言的人来说都是常见的苦恼。因此,请将这些观点作为友好的建议,而不是严厉的批评。

答案 2 :(得分:0)

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

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

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