2

для небольшого научного проекта. Я создал класс Simulation, который содержит все моделируемые объекты в ptr_list. Поскольку мне нужен быстрый доступ ко всем Particles, я добавил дополнительный ptr_list. Теперь boost жалуется, потому что ему не нравятся форвардные декларируемые классы. 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 использует шаблонный класс и нуждается в его определении, непротиворечивого объявления недостаточно.

Вы можете исправить это, объявив конструктор явно и определяя его только после определения шаблона класса.

Смежные вопросы