Дублирующая ошибка символа - глобальная константа
В заголовке класса, вне объявления интерфейса, я объявлял глобальные константы:
NSString * const gotFilePathNotification = @"gotFilePath";
NSString * const gotResultNotification = @"gotResultOfType";
gotResultNotification используется только в этом классе (пока), но я ссылаюсь на gotFilePathNotificaion в другой реализации класса. Для этого я импортирую этот заголовок.
Когда я пытаюсь скомпилировать, я получаю дубликат символьного компоновщика ошибки в gotFilePathNotification в этом заголовке. Почему это происходит?
Ответы
Ответ 1
У вас есть два идентификатора с одинаковым именем в двух разных единицах компиляции в области файлов. Это нарушает одно правило определения. Вместо этого вам нужно -
-
Объявить, что глобальные метки переменных имеют внешнюю привязку в файле заголовка.
extern NSString * const gotFilePathNotification;
-
Теперь укажите определение в только одном исходном файле.
NSString * const gotFilePathNotification = @"gotFilePath";
Теперь, когда вам нужно использовать эти переменные, включите заголовок в исходный файл.
Ответ 2
Вам нужно объявить их extern в файле заголовка и определить их в файле реализации. См. Этот вопрос для уточнения. Глобальные переменные в Cocoa/Objective-C?.
Второй ответ дает пояснение, которое я повторю здесь. Классификатор хранилища по умолчанию для переменных является статическим. Это означает, что при попытке связать два разных файла с одной и той же переменной, как это происходит при импорте файла заголовка, компоновщик будет понимать, что переменная многократно определена.
Ответ 3
Также убедитесь, что вы включаете файл h, а не файл m. Это сводило меня с ума.