不同类的C++向量

C++ vector of different class

提问人:Rex 提问时间:10/10/2018 最后编辑:Rex 更新时间:10/10/2018 访问量:136

问:

所以我正在尝试制作一个 std::vector<>它将包含我的组件:

class Component
{
private:


public:
    Component();

    void update();

    ~Component();
};

向量在我的对象类中:

class Object
{
private:
    std::vector<?> m_Components;
public:
    Object();

    void addComponent(? component)
    {
        m_Components.push_back(component);
    }

    ~Object();
};

所以我尝试使用模板,但它失败了错误:使用变量模板需要模板参数列表

我需要使用模板吗?如果是,如何?感谢您的帮助!

编辑:我的组件派生自 Component 类

C++ 模板 矢量

评论

0赞 Remy Lebeau 10/10/2018
不,您不需要使用模板。但是,您存储的是类本身的实例,还是派生自?这有很大的不同。在前一种情况下,您可以使用 ,在后一种情况下,您必须改用以避免切片对象vectorComponentComponentvector<Component>vector<Component*>
0赞 Rex 10/10/2018
派生类,我将编辑我的帖子
0赞 Rex 10/10/2018
我尝试了vector<Component*>但是当制作Component2:Component类时,它给了我这个错误:不允许转换为无法访问的基类“Component”
0赞 Remy Lebeau 10/10/2018
请改用。 使用私有继承,但需要有继承。此外,需要声明,就好像您打算通过基指针派生对象一样。class Component2 : public Componentclass Component : Component~Component()virtualdeleteComponent*

答:

1赞 Remy Lebeau 10/10/2018 #1

由于您正在处理多态类,因此您需要使用当前拥有的位置,因为多态性仅适用于指针/引用,并且还要避免切片您添加到 中的任何对象,例如:Component*?vector

class Object
{
private:
    std::vector<Component*> m_Components;
public:
    Object();

    void addComponent(Component *component)
    {
        m_Components.push_back(component);
    }

    ~Object();
};