Ошибки дублирования символов внешнего наследования, что происходит?

У меня вопрос об использовании extern и наследования. Я кодирую приложение iOS на Objective C, используя X-Code.

У меня есть два гипотетических класса B и C, которые наследуются от класса A.

Теперь класс A импортирует класс с именем Constraints в свой заголовочный файл следующим образом: #import "Constraints.h". В заголовке ограничений .H объявляются различные значения extern NSInteger const VAR_NAME выше @interface Constraints: NSObject, но ниже импортируемых. В реализации .M внешние элементы инициализируются, например, следующим образом: NSInteger const VAR_NAME = 1. Опять же, он находится ниже импорта, но выше строки @implementation Constraints. Этот файл предназначен для хранения глобальных ограничений приложения.

Однако при этом при сборке XCode сообщает об ошибке mach-o-linker для повторяющихся символов в классах B и C для каждой и каждой переменной, объявленной как extern в файлах ограничений.

Тогда я удалил импорт ограничений класса из родительского класса A и вместо этого импортировал его непосредственно в классы B и C. Однако у меня возникла та же проблема.

Я уже несколько часов бью головой об стол, любая помощь будет принята с благодарностью.


person Andrew S    schedule 20.02.2013    source источник


Ответы (1)


Можете ли вы опубликовать код, вызывающий ошибку? Мне это кажется правильным и обычно возникает из-за опечатки. Я читал другие сообщения, в которых люди просто случайно импортировали файл .m вместо файла .h, что обычно вызывает эту ошибку.

person JiuJitsuCoder    schedule 20.02.2013
comment
Спасибо за ответ, я попробую сделать небольшой пример и протестировать, так как код очень большой. - person Andrew S; 20.02.2013
comment
Ах, в моем простом примере не было проблем, поэтому моя модель того, как все должно работать, кажется правильной. Дочерние классы также должны импортировать класс ограничений, поскольку он не наследуется. - person Andrew S; 20.02.2013
comment
Я рад, что у тебя все получилось. Если я был полезен, мы всегда будем благодарны за ваши голоса! - person JiuJitsuCoder; 21.02.2013