дубликат символа obj-c для переменной заголовка - PullRequest
2 голосов
/ 15 декабря 2009

У меня сложилось впечатление, что использование #import будет импортировать файл только один раз за сборку, но после попытки определить переменную в заголовке, а затем импортировать этот заголовок в два разных исходных файла, я получаю ошибку компоновщика дубликатов символов для переменная. Как это возможно?

Ответы [ 3 ]

6 голосов
/ 15 декабря 2009

#import делает заголовок включаемым один раз для файла , но не для сборки. Таким образом, ваша переменная определяется в каждом файле, в который вы импортируете свой заголовок, и, поскольку глобальная переменная видима по умолчанию во всем проекте, вы получаете ошибку компоновщика.
Правильный способ определения глобальной переменной (если это то, что вы хотите сделать) - определить ее в файле реализации и связать ее с ключевым словом external в других файлах.
Также определение переменной в заголовке как статической ограничит ее видимость одним файлом, поэтому вы не получите никакой ошибки, но, скорее всего, не тот результат, который вам нужен;)

2 голосов
/ 16 декабря 2009

#import гарантирует, что «декларации» включены только один раз. Поскольку вы определяете переменную, которая является «определением», которое заставляет вас получить ошибку компоновщика дубликатов символов.

Чтобы устранить эту ошибку - используйте .h только для объявления и .m для определения

Как объяснил Владимир, вы можете использовать extern

1 голос
/ 19 июля 2013

После того, как я настроил новый класс, у меня неожиданно появилось несколько дублированных символов.

Наконец понял, что мне удалось сделать это в файле .m:

#import "other-file.m"

Обратите внимание на «м». :)

...