Объявленный заранее класс в boost :: ptr_list - PullRequest
2 голосов
/ 10 марта 2012

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

1 Ответ

1 голос
/ 10 марта 2012

Я думаю, проблема в том, что конструктор неявно создается компилятором и вызывает конструктор списка ptr_list. Конструктор ptr_list использует шаблонный класс и нуждается в его определении, прямого объявления недостаточно.

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

...