extern вызывает ошибку компоновщика

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

первый.ч

extern PlanningDocumentService *folderService;

первый.м

#import first.h

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

секунда.ч

#import first.h

сек.м

#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 нигде, кроме файлов выше. Приветствуются любые идеи.


person Robert    schedule 15.02.2013    source источник
comment
где создается служба папок? вы просто помещаете extern, но на самом деле вам нужно создать var   -  person Ultrakorne    schedule 15.02.2013


Ответы (2)


Вам нужно определить folderService, чтобы иметь глобальную область действия:

первый.м:

#import "first.h"

PlanningDocumentService *folderService = nil;

- (void)serviceDefinition
{    
    folderService = [_myDocumentViews objectAtIndex:[_gridView indexOfSelectedItem]];   
    detail.service = folderService;
}
person trojanfoe    schedule 15.02.2013

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

person Matthias    schedule 15.02.2013
comment
Также стучите. Принял бы оба ответа, если бы это было разрешено. =) Спасибо. - person Robert; 15.02.2013