чисто виртуальная функция
От: cthutq00  
Дата: 01.05.06 09:59
Оценка:
столкнулся с непонятной проблеммой и не пойму как ее решить.

1.есть библиотека в которой реализованы классы (библиотека моя)
в этой библиотеке есть класс с чисто виртуальным методом

если схематично — то примерно так


class Base {
    unsigned thread (void* arg);
    virtual void func(void) = 0;
}


при создании объекта класса создается поток (потоковая функция — thread);
в этом потоке происходит вызов чисто виртуальной функции


unsigned Base::thread (void* arg){
...
   func();
...
}


2. эта библиотека представляет собой один из проектов в solution (VC 8.0)
Второй проект на основе нее создает класс унаследованный от Base и переопределяет эту виртуальную
функию


class A : public Base{
    virtual void func(void) {
      ...
    }
}


так вот при отладке в Base::thread происходит вызов не A::func() а почему-то Base::func()
естественно при вызове чисто виртуальной функции все слетает

Почему это происходит я так и не могу понять. Складывается впечатление, что у А vptr указывает на vtbl Base.

Но почему компилятор неправильно собрал код ?
Самое интересное, что если вызвать func() из другого метода Base, то все срабатывает.

Как такое может быть ?
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.