std :: vector包含基类实例而不是派生类

时间:2015-03-21 10:11:37

标签: c++ vector stdvector

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

  1. 我有一个矢量:

    vector<SceneNode*> children;
    
  2. 其中 SceneNode 是一个具有纯虚函数的抽象类。

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

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

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

        你能帮忙吗,谢谢你!

1 个答案:

答案 0 :(得分:4)

对于已被销毁的对象,最常遇到“纯虚函数调用”错误。我注意到你抓住了一个指向node的指针,这是一个具有局部范围的变量。如果您在函数退出后尝试从children中的指针访问该对象,那么您将遇到类似这样的错误。