Доброй ночи!
Что это за ошибка такая:
"undefined reference to 'vtable for MyClass'?
Пытался при наследовании
MyClass указывать virtual — ошибка не пропала, а появилась еще такая
"undefined reference to 'VTT for MyClass'?.
Все чисто виртуальные функции реализованы (на
new MyClass компилятор не ругается).
Ошибку показывает на первой строчке определения конструктора.
Куда теряется таблица виртуальных функций?
(Qt 2010.02.1, WinXP)
Заранее спасибо за подсказки.
Здравствуйте, makes, Вы писали:
M>Доброй ночи!
M>Что это за ошибка такая:
M>"undefined reference to 'vtable for MyClass'?
M>Пытался при наследовании MyClass указывать virtual — ошибка не пропала, а появилась еще такая
M>"undefined reference to 'VTT for MyClass'?.
M>Все чисто виртуальные функции реализованы (на new MyClass компилятор не ругается).
M>Ошибку показывает на первой строчке определения конструктора.
M>Куда теряется таблица виртуальных функций?
M>(Qt 2010.02.1, WinXP)
M>Заранее спасибо за подсказки.
Ну хоть бы код привёл.
Если пишешт на Qt обязательно реализуй деструктор/конструктор и обнови
Makefile (запусти qmake). Все будет ок.
Posted via RSDN NNTP Server 2.1 beta
M>Что это за ошибка такая:
M>"undefined reference to 'vtable for MyClass'"?
Нашел в чем проблема!
Кратко: чисто виртуальная функция родительского класса (интерфейса) была объявлена, но не определена в дочернем.
Например:
class IClass
{
public:
virtual void foo() = 0;
};
class MyClass : public IClass
{
public:
void foo();
};
MyClass x;
Хотя я ожидал, что в этом будет ошибка типа
"undefined reference to 'MyClass::foo'"
Здравствуйте, makes, Вы писали:
M>Доброй ночи!
M>Что это за ошибка такая:
M>"undefined reference to 'vtable for MyClass'?
M>Пытался при наследовании MyClass указывать virtual — ошибка не пропала, а появилась еще такая
M>"undefined reference to 'VTT for MyClass'?.
M>Все чисто виртуальные функции реализованы (на new MyClass компилятор не ругается).
M>Ошибку показывает на первой строчке определения конструктора.
M>Куда теряется таблица виртуальных функций?
M>(Qt 2010.02.1, WinXP)
M>Заранее спасибо за подсказки.
Такое часто встречается вот в каком случае:
— создаешь хедер и срр, пишешь класс
— добавляешь в проект
— прогоняешь qmake
— потом добавляешь в класс слоты/сигналы
В этом случае при запуске qmake'а в п.3 не создаются вызовы moc'а, т.к. не было нужно. После добавления сигналов/слотов нужны вызовы moc'а для генерации стабов. Вот их и не хватает для vtable'а.
Простой повторный запуск qmake'а не спасает, надо удалить файлы object_script.XXX.debug и object_script.XXX.release.
P.S. Это на винде, на других платформах может быть немного иначе, но идея думаю понятна.