2

pour un petit projet scientifique J'ai mis en place une classe Simulation qui contient tous les objets simulés dans une liste ptr_list. Parce que j'ai besoin d'avoir un accès rapide à toutes les particules, j'ai ajouté une liste supplémentaire ptr_list. Maintenant, boost se plaint, car il n'aime pas les classes déclarées en avant. recursive_wrapper m'a déjà été signalé, mais ptr_list< recursive_wrapper<Particle> > semble ne pas fonctionner non plus.Classe forward-déclarée dans 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(); 
} 

Répondre

1

Je pense que le problème est le constructeur est implicitement créé par le compilateur et appelle le constructeur de la ptr_list. Le constructeur ptr_list utilise la classe modèle et a besoin de sa définition, la déclaration forward n'est pas suffisante.

Vous pouvez résoudre ce problème en déclarant le constructeur explicitement et en le définissant uniquement après la définition de la classe basée sur un modèle.

Questions connexes