undefined reference to vtable
От: makes Россия  
Дата: 11.03.10 01:52
Оценка:
Доброй ночи!

Что это за ошибка такая:
"undefined reference to 'vtable for MyClass'?

Пытался при наследовании MyClass указывать virtual — ошибка не пропала, а появилась еще такая
"undefined reference to 'VTT for MyClass'?.

Все чисто виртуальные функции реализованы (на new MyClass компилятор не ругается).

Ошибку показывает на первой строчке определения конструктора.

Куда теряется таблица виртуальных функций?
(Qt 2010.02.1, WinXP)

Заранее спасибо за подсказки.
Re: undefined reference to vtable
От: fdn721  
Дата: 11.03.10 05:49
Оценка:
Здравствуйте, 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>Заранее спасибо за подсказки.


Ну хоть бы код привёл.
Re: undefined reference to vtable
От: jerry_ru  
Дата: 11.03.10 06:54
Оценка:
Если пишешт на Qt обязательно реализуй деструктор/конструктор и обнови
Makefile (запусти qmake). Все будет ок.
Posted via RSDN NNTP Server 2.1 beta
Re[2]: undefined reference to vtable
От: makes Россия  
Дата: 11.03.10 14:32
Оценка:
Здравствуйте, fdn721, Вы писали:


F>Ну хоть бы код привёл.


Я бы с удовольствием, но там уже порядка сотни листов (что-то я побоялся...).
Re: undefined reference to vtable - нашел
От: makes Россия  
Дата: 11.03.10 23:00
Оценка:
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'"
Re: undefined reference to vtable
От: Murom Россия  
Дата: 16.03.10 12:50
Оценка: 3 (1)
Здравствуйте, 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. Это на винде, на других платформах может быть немного иначе, но идея думаю понятна.
- Eugeny
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.