typedef в отдельном заголовочном файле

У меня есть файл defines.h со следующим кодом

    typedef enum AnswerType : NSUInteger {
    kAnswerTypeNotResponded = 0,
    kAnswerTypeYes = 1,
    kAnswerTypeNo = 2,
    kAnswerTypeComplain = 3
} AnswerType;

Когда я импортирую этот файл в несколько других файлов - я получаю ошибку

ld: 13 duplicate symbols for architecture i386
clang: error: linker command failed with exit code 1 (use -v to see invocation)

Мне нужно, чтобы AnswerType был виден во многих местах. Каков наилучший вариант его реализации?


person Mykyta Karpyshyn    schedule 01.01.2016    source источник
comment
Связаны ли повторяющиеся символы с этим перечислением или с чем-то еще? Скорее всего, у вас есть константы в .h, которые не были должным образом помечены как extern.   -  person rmaddy    schedule 02.01.2016
comment
Обновите свой вопрос некоторыми примерами повторяющихся символов и их соответствующим объявлением в файле .h.   -  person rmaddy    schedule 02.01.2016
comment
Эй, вы можете увидеть мой ответ для вашего точного решения: stackoverflow.com/a/38762225/1733922   -  person Kalpesh Panchasara    schedule 07.08.2017


Ответы (2)


Ваше перечисление выглядит нормально. Однако, я думаю, должна быть другая проблема.

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

Вот шаги, которые вы можете выполнить:

  1. Проверьте этапы сборки в настройках цели.
  2. Проверьте, существует ли какой-либо файл дважды.
  3. Если файл существует дважды, удалите один. Если не удалить файл внизу, который является последним.
  4. Построить заново.

Исходный источник ответа

person BLC    schedule 01.01.2016
comment
Большое спасибо! Проблема была именно вы описали! - person Mykyta Karpyshyn; 02.01.2016

Просто выполните следующие шаги, и ваша проблема будет решена.

<сильный>1. Перейти к настройкам сборки

<сильный>2. Найдите нет общих блоков и

<сильный>3. Установите НЕТ

<сильный>4. Построить заново

<сильный>5. Вы больше не получите эту ошибку.

person Kalpesh Panchasara    schedule 07.08.2017