我正在尝试创建一个包含来自基类的元素的新型 vector 。我所做的是将基类 vector 元素动态转换为派生类型,以便应用我在派生类中添加的一些方法。
这就是我大概做的:
std::vector<BaseClass *> A;
std::vector<DerivedClass *> B;
DerivedClass *m = new DerivedClass;
std::vector<BaseClass *>::const_iterator iterator = A.begin();
AMD_STD::vector<BaseClass *>::const_iterator iteratorEnd = A.end()
for(; iterator!= iteratorEnd; ++iterator)
{
m = dynamic_cast<DerivedClass *>(*iterator);
B.push_back(m);
}
B->MyMethod();
问题是当我尝试应用该方法时我有一个 NULL 指针并且它正在生成执行错误。 我认为问题是由于 dynamic_cast 失败造成的。谁能帮我解决这个问题。 提前致谢。
最佳答案
如果dynamic_cast<DerivedClass*>(*iterator)
失败并返回 nullptr
什么时候*iterator
不是 nullptr
,然后您向 vector 添加了一个元素,该元素是 BaseClass*
类型, 但不是 DerivedClass*
类型.就这么简单。
虽然您没有展示任何添加 vector 元素的代码,但您明确表示“这就是我大致所做的”,这为其他真相留下了空间。
关于c++ - Dynamic_Cast vector 元素,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32113987/