【问题标题】:C++ vector of different class不同类的 C++ 向量
【发布时间】:2018-10-10 01:10:21
【问题描述】:

所以我正在尝试制作一个包含我的组件的 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 类派生的

【问题讨论】:

  • 不,您不需要使用模板。但是,您的vector 是存储Component 类本身的实例,还是从Component 派生的类的实例?它有很大的不同。在前一种情况下,你可以使用vector&lt;Component&gt;,在后一种情况下你必须使用vector&lt;Component*&gt;来避免slicing the objects
  • 我将编辑我的帖子的派生类
  • 我试过 vector 但是当创建一个 Component2:Component 类时,它给了我这个错误:不允许转换为无法访问的基类“Component”
  • 请改用class Component2 : public Componentclass Component : Component 使用 private 继承,但您需要 public 继承。此外,如果您打算通过基址 Component* 指针 delete 派生对象,则需要将 ~Component() 声明为 virtual

标签: c++ templates vector


【解决方案1】:

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

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

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

    ~Object();
};

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2014-11-21
    • 2019-11-20
    • 1970-01-01
    • 2018-05-05
    • 1970-01-01
    • 2020-07-14
    • 1970-01-01
    相关资源
    最近更新 更多