【问题标题】:Objective-C on GNUstep AutoReleasePool undeclared problemGNUstep AutoReleasePool 上的 Objective-C 未声明问题
【发布时间】:2009-08-16 16:18:12
【问题描述】:

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

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

【问题讨论】:

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


    【解决方案1】:

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

    【讨论】:

    • 此外,Foundation 标头应导入为 并带有尖括号而不是双引号。
    【解决方案2】:

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

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

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

    【讨论】:

    • 非常感谢Quinn,我会牢记这些事情并遵循它们:)再次感谢您
    【解决方案3】:

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

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-06-16
      • 1970-01-01
      • 2014-07-30
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多