std::vector 持有基础 class 实例而不是派生的 class
std::vector holds base class instance and not of a derived class
我对 C++ vector 的理解有问题:我从 vector 得到的对象总是一个基础抽象 class 而不是添加到它的派生 class。
我有一个向量:
vector<SceneNode*> children;
其中 SceneNode 是一个具有纯虚函数的抽象class。
我将 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);
}
- 稍后当我迭代向量时,里面的对象是 SceneNode 的一个实例并且失败并出现“纯虚函数”调用错误:
能不能帮帮忙,谢谢!
"pure virtual function call" 错误最常见于已销毁的对象。我注意到您正在获取并持有指向 node
的指针,这是一个具有局部作用域的变量。如果您在函数退出后试图从 children
中的指针访问该对象,您将 运行 陷入类似这样的错误。
我对 C++ vector 的理解有问题:我从 vector 得到的对象总是一个基础抽象 class 而不是添加到它的派生 class。
我有一个向量:
vector<SceneNode*> children;
其中 SceneNode 是一个具有纯虚函数的抽象class。
我将 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);
}
- 稍后当我迭代向量时,里面的对象是 SceneNode 的一个实例并且失败并出现“纯虚函数”调用错误:
能不能帮帮忙,谢谢!
"pure virtual function call" 错误最常见于已销毁的对象。我注意到您正在获取并持有指向 node
的指针,这是一个具有局部作用域的变量。如果您在函数退出后试图从 children
中的指针访问该对象,您将 运行 陷入类似这样的错误。