Грешки при дублиране на символи при външно наследяване, какво става?

Имам въпрос относно използването на extern и inheritance. Кодирам приложение за 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 във файловете Constraints.

Така че това, което направих след това, беше да премахна импортирането на класа Constraints от родителския клас 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