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代わりに使用してみてください。NSAutoReleasePoolr

于 2009-08-16T16:22:36.557 に答える
6

アダムはあなたが報告した問題を釘付けにしました、あなたはクラス名にタイプミスがあります。ただし、他にもいくつか問題があり、知っておくと役立つと思います。

  • あなたのメソッドは、コードを読みにくくし、あなたを助けようとしている人々を混乱させるいくつかのObjective-Cの慣習を破ります。
    • 匿名のセレクターフラグメントは決して良い考えではありません。各コロンの前には、常にわかりやすい名前を使用してください。
    • より良い署名は- (void) hellowWithFirstName:(NSString*)firstName lastName:(NSString*)lastName;
    • メソッドの宣言と定義で同じ仮パラメーター名を使用することを強くお勧めします。(一方に「name」を使用し、もう一方に「firstName」を使用します。)別の名前を付ける場合は、ヘッダーファイルの1つがよく考えられていることを確認してください。これは、ユーザーがコーディングするパブリックインターフェイスです。
  • 「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 に答える