2013-02-15 2 views
1

Кажется, это почти дубликат this question, но ответ там не затронул проблему.extern вызывает ошибку Linker

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

где создана папкаСервис? вы просто положили extern, но на самом деле вам нужно создать var – Ultrakorne

ответ

4

Вам нужно определить folderService иметь глобальный масштаб:

first.m:

#import "first.h" 

PlanningDocumentService *folderService = nil; 

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

Работал отлично, спасибо! – Robert

3

PlanningDocumentService *folderService в - (void)serviceDefinition делает локальной переменной функции, но не глобальные. Но extern PlanningDocumentService *folderService объявляет о существовании глобальной переменной, которая никогда не определяется.

+0

Также удар по. Приняли бы оба ответа, если бы это было разрешено. =) Спасибо. – Robert

Смежные вопросы