У меня есть немного модифицированная версия класса потока скопированного выключить Linux Self Help сайт, который я использовал для создания резьбы базового класса:Почему перегруженный элемент не вызывается из потока?
class Thread
{
public:
static void *entry (void *pvArg) { Thread *pobjThread = static_cast<Thread *> (pvArg); pobjThread->run(); }
virtual void run (void) = 0;
};
У меня есть 2 нити классов:
class Item : public Thread
и
class Product : public Thread
class Item
начинает поток от конструктора функции, класс которой в pthread библиотеки для создания потока, вызывающего entry
, с this
как pvArg
, а class Product
создает его поток позже во время выполнения программы.
Теперь дело в том, class Item
отлично работает. Вызывается и обрабатывается функция run
. Однако, когда class Product
вызывает ту же функцию позже, я получаю:
pure virtual method called
Оба класса имеют одинаковую реализацию с перегрузкой метода run
, но один называется, а другой нет.
Зачем мне внезапно получать исключение pure virtual method called
?
Спасибо.
Update: class Item
отличается class Product
, потому что Item
объявлен как static Item item;
в файле CPP, и есть только один. class Product
используется как обычный объект. Если я делаю то же самое с class Product
, он отлично работает.
Вы уверены, что 'Product' не является производным от' Item'? Это объясняет ошибку. – modelnine
@PlasmaHH - Исключение исходит из класса, вызываемого обычно. Вызов из ctor («Элемент») работает правильно. – user626201
@modelnine - нет, они совершенно разные классы. Соединение отсутствует, даже в заголовке нет (кроме заголовка потока). – user626201