2
작은 과학 프로젝트 용

ptr_list에있는 모든 시뮬레이션 된 객체를 보유하는 Simulation 클래스를 설정합니다. 모든 Particles에 대한 빠른 액세스가 필요하기 때문에 추가 ptr_list를 추가했습니다. 이제는 선언 된 수업을 좋아하지 않으므로 불평을 부추겼습니다. recursive_wrapper이 이미 나와 지적되었지만 ptr_list< recursive_wrapper<Particle> >도 잘 작동하지 않는 것 같습니다.boost :: ptr_list의 forward-declared 클래스

#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 생성자는 템플릿 화 된 클래스를 사용하고 정의를 필요로하므로 전방 선언으로는 충분하지 않습니다.

생성자를 명시 적으로 선언하고 템플릿 기반 클래스가 정의 된 후에 만 ​​정의하여이 문제를 해결할 수 있습니다.