-std = c++0xでEclipse/gccを使用してUbuntuで開発する。
オブジェクトのスライスに問題があるようですが、これはここで見た他の質問には当てはまりません。私は非常に単純な基本クラス/子クラスの継承モデルを持っています。基本クラスには、明らかに子が実装する1つの純粋仮想関数があります。
class Parent{
public:
Parent();
virtual ~Parent();
virtual void DoStuff() = 0;
};
class Child : public Parent{
public:
Child();
virtual ~Child();
virtual void DoStuff(); //Child can have "grandchildren"
};
私が欲しいのは、ワーカースレッドで処理するためにこれらのオブジェクトを格納できるキューを用意することです。ポインタを保存する必要があることはわかっています。そうしないと、スライスが保証されます。したがって、これを行うクラス( "Processor")には、次のものがあります。
typedef queue<Parent*> MYQUEUE; //#include <queue>
static MYQUEUE myQueue;
//Call this after creating "Child c;" and passing in &c:
void Processor::Enqueue(Parent* p)
{
myQueue.push(p);
}
void* Process(void* args) //function that becomes the worker thread
{
while(true)
{
if(!myQueue.empty())
{
Parent* p = myQueue.front();
p->DoStuff();
myQueue.pop();
}
}
return 0;
}
次に起こることは、継承/ポリモーフィズムが正しく機能していないかのように、「純粋仮想メソッドが呼び出されました」と言ってプログラムがクラッシュすることです。テストしたときにこれが機能することを確認したので、継承が正しく設定されていることを知っています。
Child c;
Parent* p = &c;
p->DoStuff();
どんな指導も大歓迎です!