访问全局变量,在目标C中给出链接器错误

时间:2012-11-20 07:20:56

标签: objective-c global-variables linker-errors extern

我已经宣布了一个全局变量,如下面的

extern NSString *name;
@interface viewcontrollerOne{}

在实现文件中我正在某种方法中访问该全局变量,如

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

但是这会给链接器错误。

  

“name”,引自:          - viewcontrollerOne.o中的[viewcontrollerOne someMethod]   ld:找不到架构i386的符号   clang:错误:链接器命令失败,退出代码为1(使用-v查看调用)

2 个答案:

答案 0 :(得分:2)

以下只是一个声明:

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

它声明NSString*的符号名为name。它不会创建存储空间。

为此,您需要提供name的定义。为此,请将以下添加到.m 文件中:

NSString * const name = @"hello";

如果你想在实例方法中设置它,如你的例子中所示,那么你可以声明它:

MONFile.h

extern NSString * name;

定义它:

MONFile.m

NSString * name = 0;

然后您可以在实例方法中编写name = @"hello";

答案 1 :(得分: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;
}