extern导致链接器错误

问题描述:

似乎几乎是this question的副本,但答案并没有解决问题。extern导致链接器错误

first.h

extern PlanningDocumentService *folderService; 

first.m

#import first.h 

- (void)serviceDefinition 
{  
    PlanningDocumentService *folderService = [_myDocumentViews objectAtIndex:[_gridView indexOfSelectedItem]]; 
    detail.service = folderService; 
} 

second.h

#import first.h 

second.m

#import second.h 

+(NSArray*)getDocumentData 
{ 
    NSString *passedCaption = folderService.caption; 
} 

给出了错误:

Undefined symbols for architecture i386: 
    "_folderService", referenced from: 
     +[GenericService getDocumentData] in GenericService.o 
ld: symbol(s) not found for architecture i386 
clang: error: linker command failed with exit code 1 (use -v to see invocation) 

我没有声明或定义除上述文件以外的任何地方folderService。 欢迎任何想法。

+0

其中是folderService创建?你只是把外部,但你实际上必须创建变种 – Ultrakorne 2013-02-15 15:22:45

您需要定义folderService有全局范围:

first.m:

#import "first.h" 

PlanningDocumentService *folderService = nil; 

- (void)serviceDefinition 
{  
    folderService = [_myDocumentViews objectAtIndex:[_gridView indexOfSelectedItem]]; 
    detail.service = folderService; 
} 
+0

完美工作,谢谢! – Robert 2013-02-15 15:30:08

PlanningDocumentService *folderService- (void)serviceDefinition使局部变量的函数,而不是全球性的。但extern PlanningDocumentService *folderService声明了全局变量的存在,这是从未定义的。

+0

也砰的一声。如果允许的话,会接受这两个答案。 =) 谢谢。 – Robert 2013-02-15 15:35:43