2

小さな科学プロジェクトのために、シミュレートされたすべてのオブジェクトを ptr_list に保持する Simulation クラスをセットアップしました。すべてのパーティクルにすばやくアクセスする必要があるため、追加の ptr_list を追加しました。前方宣言されたクラスが好きではないため、ブーストは不平を言うようになりました。recursive_wrapperすでに指摘されていましたが、ptr_list< recursive_wrapper<Particle> >どちらもうまくいかないようです。

#include <boost/ptr_container/ptr_list.hpp>

class SimulatedObject {
};

class Particle; // derived from SimulatedObject

class Simulation {
public:
    void addObj(SimulatedObject *obj) {
        simulatedObjects.push_back(obj);
    }
    void addObj(Particle *par) {
        particles.push_back(par);
    }
protected:
    boost::ptr_list<SimulatedObject> simulatedObjects;
    boost::ptr_list<Particle> particles;
};

int main(int argc, char** argv) {
    Simulation sim();
}
4

1 に答える 1

1

問題は、コンストラクターがコンパイラーによって暗黙的に作成され、ptr_list のコンストラクターを呼び出すことだと思います。ptr_list コンストラクターはテンプレート化されたクラスを使用しており、その定義が必要です。前方宣言では十分ではありません。

コンストラクターを明示的に宣言し、テンプレート化されたクラスが定義された後にのみ定義することで、これを修正できます。

于 2012-03-09T20:55:16.787 に答える