1

以下のようなグローバル変数を宣言しました

extern NSString *name;
@interface viewcontrollerOne{}

実装ファイルでは、次のようなメソッドでそのグローバル変数にアクセスしています

-(void)someMethod
{
name = @"hello";
}

しかし、これはリンカーエラーを引き起こしています。

「name」、参照元: -[viewcontrollerOne someMethod] in viewcontrollerOne.o ld: アーキテクチャ i386 のシンボルが見つかりませんでした。clang: エラー: リンカー コマンドが終了コード 1 で失敗しました (-v を使用して呼び出しを確認してください)

4

2 に答える 2

2

以下は単なる宣言です。

extern NSString * const name; // << side note: this should typically be const

NSString*namedのシンボルがあることを宣言しnameます。ストレージは作成しません。

そのためには、 の定義を提供する必要がありますname。これを行うには、以下を .mファイルに追加します。

NSString * const name = @"hello";

あなたの例に見られるように、インスタンスメソッドでそれを設定したい場合は、それを宣言することができます:

MONFile.h

extern NSString * name;

それを定義します:

MONFile.m

NSString * name = 0;

name = @"hello";次に、インスタンス メソッドに書き込むことができます。

于 2012-11-20T07:33:14.557 に答える
0

extern は通常、定数を作成するために使用されます。グローバル変数文字列を作成する場合は、次の方法で実行できます。

.h

+ (void)setName:(NSString*)name_in;

+ (NSString*)name;

.m

NSString* gName;

@implementation ...

+ (void)setName:(NSString*)name_in{
   gName = name_in;
}

+ (NSString*)name{
  return gName;
}
于 2012-11-20T07:35:14.670 に答える