私はスレッドベースクラスを作成するために使用したLinux Self Helpオフサイトコピースレッドクラスのわずかに変更されたバージョンがありますスレッドからオーバーロードされたメンバーが呼び出されないのはなぜですか?
class Item : public Thread
と
:I 2つのスレッドクラスを有するclass Thread
{
public:
static void *entry (void *pvArg) { Thread *pobjThread = static_cast<Thread *> (pvArg); pobjThread->run(); }
virtual void run (void) = 0;
};
を
class Product : public Thread
class Item
このスレッドを関数のコンストラクタから開始します。このクラスは、pthreadスレッドを作成するためのスレッドを作成するにはをpvArg
とし、class Product
はプログラム実行中に後でスレッドを作成します。
今のところ、class Item
は問題ありません。 run
関数が呼び出され、正しく処理されます。
pure virtual method called
どちらのクラスがrun
メソッドをオーバーロードと同じ実装を持っていますが、一つはと呼ばれ、他ではありません:class Product
は後で同じ関数を呼び出すときしかし、私が得ます。
なぜ私は突然pure virtual method called
例外を受け取りますか?
ありがとうございました。
更新: class Item
は異なっているのcppファイルにstatic Item item;
として宣言し、唯一のものがあるclass Product
Item
のでれます。 class Product
は通常のオブジェクトのように使用されます。私がclass Product
と同じことをしてもうまくいきます。
'Product'は' Item'から派生していないのですか?それはエラーを説明するでしょう。 – modelnine
@PlasmaHH - 例外は、通常呼び出されるクラスから来ています。 'Item'のctorからの呼び出しが正しく機能しています。 – user626201
@modelnine - そうではありませんが、それらははっきりと異なるクラスです。ヘッダーインクルード(スレッドヘッダー以外)にも接続がありません。 – user626201