c++ - Dynamic_Cast vector 元素

标签 c++ iterator dynamic-cast

我正在尝试创建一个包含来自基类的元素的新型 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/

相关文章:

c++ - 将引用包装器的 vector 转换为基类,将引用包装器的 vector 转换为派生类,不能动态转换

c++ - Range-Based for 循环如何处理临时容器

java - 显示存储在 HashMap 中的对象值

c++ - dynamic_cast 导致 bad_cast 错误

c++ - vptr 是否曾经位于对象的开头?

vector - 惯用地将空格分隔的字符串解析为不同类型元组的 Vec

c++ - 如何扩展 ESP32 堆大小?

c++ - 重新定义 C++

c++ - 如何解释函数模板解析?

python - 使用 for 循环读取文件时跳过一行