std::vector 持有基础 class 实例而不是派生的 class

std::vector holds base class instance and not of a derived class

我对 C++ vector 的理解有问题:我从 vector 得到的对象总是一个基础抽象 class 而不是添加到它的派生 class。

  1. 我有一个向量:

    vector<SceneNode*> children;
    

其中 SceneNode 是一个具有纯虚函数的抽象class。

  1. 我将 ImageSceneNode 的实例(派生自 SceneNode)添加到此向量:

    lib::ImageSceneNode node(static_cast<TextureAsset*>(test));
    
    sceneManager.getRoot()->addChild(&node);
    

其中addChild函数为:

   void SceneNode::addChild(SceneNode* child) noexcept {
        this->children.push_back(child);
    }
  1. 稍后当我迭代向量时,里面的对象是 SceneNode 的一个实例并且失败并出现“纯虚函数”调用错误:

能不能帮帮忙,谢谢!

"pure virtual function call" 错误最常见于已销毁的对象。我注意到您正在获取并持有指向 node 的指针,这是一个具有局部作用域的变量。如果您在函数退出后试图从 children 中的指针访问该对象,您将 运行 陷入类似这样的错误。