Я получал следующую ошибку при компиляции проекта 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
Кто-либо знает, как я могу зафиксировать его?
Проблема заключалась в том, что в классе MultiFormatUPCEANReader я объявил конструктор и деструктор, но не написал тело деструктора, это вызывало эту неприятную проблему. Надеюсь, это поможет кому-нибудь решить их ошибку компиляции. Это ужасная ошибка компилятора с небольшим количеством информации!
Обычно это проблема отсутствия vtable: C ++ FAQ Lite 23.10 .
Из Интернет-архива:
Если вы получаете сообщение об ошибке в форме «Ошибка: обнаружены неразрешенные или неопределенные символы: виртуальная таблица для класса Fred», возможно, у вас есть неопределенная виртуальная функция-член в классе Fred.
Компилятор обычно создает волшебную структуру данных, называемую «виртуальная таблица» для классов, которые имеют виртуальную функции (так он обрабатывает динамическое связывание). Обычно вам вообще не нужно об этом знать. Но если вы забудете определить виртуальную функцию для класса Fred, вы иногда будете получать эту ошибку компоновщика.
Вот мелочь: многие компиляторы помещают эту волшебную «виртуальную таблицу» в модуле компиляции, который определяет первую не встроенную виртуальную функцию в классе. Таким образом, если первая не встроенная виртуальная функция в Fred - это wilma (), компилятор поместит виртуальную таблицу Fred в ту же единицу компиляции, где он видит Fred :: wilma (). К сожалению, если вы случайно забудете определить Fred :: wilma (), вместо того, чтобы получить значение Fred :: wilma () is undefined, вы можете получить сообщение «Виртуальная таблица Фреда не определена». Печально, но факт.