vtable для.. ссылаемый от ошибки компиляции XCode

Я получал следующую ошибку при компиляции проекта iPhone:

"vtable for oned::MultiFormatUPCEANReader", referenced from:
      __ZTVN4oned23MultiFormatUPCEANReaderE$non_lazy_ptr in MultiFormatUPCEANReader.o
ld: symbol(s) not found
collect2: ld returned 1 exit status

Кто-либо знает, как я могу зафиксировать его?

17
задан Community 29 July 2019 в 04:12
поделиться

2 ответа

Проблема заключалась в том, что в классе MultiFormatUPCEANReader я объявил конструктор и деструктор, но не написал тело деструктора, это вызывало эту неприятную проблему. Надеюсь, это поможет кому-нибудь решить их ошибку компиляции. Это ужасная ошибка компилятора с небольшим количеством информации!

40
ответ дан 30 November 2019 в 10:10
поделиться

Обычно это проблема отсутствия vtable: C ++ FAQ Lite 23.10 .

Из Интернет-архива:

Если вы получаете сообщение об ошибке в форме «Ошибка: обнаружены неразрешенные или неопределенные символы: виртуальная таблица для класса Fred», возможно, у вас есть неопределенная виртуальная функция-член в классе Fred.

Компилятор обычно создает волшебную структуру данных, называемую «виртуальная таблица» для классов, которые имеют виртуальную функции (так он обрабатывает динамическое связывание). Обычно вам вообще не нужно об этом знать. Но если вы забудете определить виртуальную функцию для класса Fred, вы иногда будете получать эту ошибку компоновщика.

Вот мелочь: многие компиляторы помещают эту волшебную «виртуальную таблицу» в модуле компиляции, который определяет первую не встроенную виртуальную функцию в классе. Таким образом, если первая не встроенная виртуальная функция в Fred - это wilma (), компилятор поместит виртуальную таблицу Fred в ту же единицу компиляции, где он видит Fred :: wilma (). К сожалению, если вы случайно забудете определить Fred :: wilma (), вместо того, чтобы получить значение Fred :: wilma () is undefined, вы можете получить сообщение «Виртуальная таблица Фреда не определена». Печально, но факт.

13
ответ дан 30 November 2019 в 10:10
поделиться
Другие вопросы по тегам:

Похожие вопросы: