c++ - boost::ptr_list 中的前向声明类

原文 标签 c++ boost forward-declaration boost-variant boost-ptr-container

对于一个小型科学项目,我设置了一个模拟类,它将所有模拟对象保存在 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();
}

最佳答案

我认为问题在于构造函数是由编译器隐式创建的,并调用 ptr_list 的构造函数。 ptr_list 构造函数使用模板化的类,需要它的定义,前向声明是不够的。

您可以通过显式声明构造函数并仅在定义模板类后定义它来解决此问题。

关于c++ - boost::ptr_list 中的前向声明类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9640794/

相关文章:

c++ - 通过 T* 从 std::set<shared_ptr<T>> 移除

c++ - 将 boost::pool 分配器与 boost::unordered_map 一起使用的语法是什么?

c++ - Boost.Spirit:结合关键字解析器和Nabialek技巧进行准备

c++ - 不完整类型循环依赖c++的无效使用

c++ - 如何将枚举类声明为模板类的内部类?

c++ - 使指针回到第一行-QFile

c++ - 格式包含非ASCII字符时sprintf不起作用

c++ - OpenGL命令-顺序或并行

unit-testing - Boost 测试与 Google 测试框架的比较

C++:如何在编译时在同一个 .cpp "see"上声明两个类?