Ich habe eine leicht modifizierte Version der Thread-Klasse kopiert aus dem Linux Self Help Website, die ich verwendet habe, eine Threading-Basisklasse zu erstellen:Warum wurde das überladene Element nicht vom Thread aufgerufen?
class Thread
{
public:
static void *entry (void *pvArg) { Thread *pobjThread = static_cast<Thread *> (pvArg); pobjThread->run(); }
virtual void run (void) = 0;
};
Ich habe 2 Thread Klassen:
class Item : public Thread
und
class Item
startet den Thread aus dem Konstruktor der Funktion, die Klasse in Pthread Bibliothek zum Erstellen der Thread-Aufruf entry
mit this
als pvArg
während class Product
erstellt Thread später während der Programmausführung.
Jetzt ist die Sache, class Item
funktioniert gut. Die run
Funktion wird aufgerufen und ordnungsgemäß verarbeitet. Wenn jedoch class Product
später die gleiche Funktion aufruft, die ich erhalte:
pure virtual method called
Beiden Klassen haben die gleiche Umsetzung mit der run
Methode Überlastung, aber man wird aufgerufen und der andere nicht.
Warum würde ich plötzlich eine pure virtual method called
Ausnahme bekommen?
Danke.
Update: class Item
anders ist die class Product
weil Item
als static Item item;
in der CPP-Datei deklariert wird, und es gibt nur einen. class Product
wird wie ein normales Objekt verwendet. Wenn ich die gleiche Sache mit class Product
mache, funktioniert es gut.
Sind Sie sicher, dass 'Product' nicht von' Item' abgeleitet ist? Das würde den Fehler erklären. – modelnine
@PlasmaHH - Die Ausnahme kommt von der normal aufgerufenen Klasse. Der Aufruf vom ctor (von 'Item') funktioniert korrekt. – user626201
@modelnine - nein, sie sind deutlich unterschiedliche Klassen. Es gibt keine Verbindung, auch nicht in Header-Includes (außer dem Thread-Header). – user626201