столкнулся с непонятной проблеммой и не пойму как ее решить.
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, то все срабатывает.
Как такое может быть ?