2

中的前向聲明類我設置了一個模擬類,它將所有模擬對象保存在ptr_list中。因爲我需要快速訪問所有的粒子,我添加了一個額外的ptr_list。現在鼓勵抱怨,因爲它不喜歡前進聲明的類。已經向我指出recursive_wrapper,但ptr_list< recursive_wrapper<Particle> >似乎也不能工作。對於一個小型科學項目,boost :: ptr_list

#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(); 
} 

回答

1

我認爲問題是構造函數是由編譯器隱式創建的,並調用ptr_list的構造函數。 ptr_list構造函數使用模板化類並需要它的定義,前向聲明是不夠的。

您可以通過顯式聲明構造函數並僅在定義模板類後定義它來解決此問題。