【发布时间】:2015-08-20 09:02:50
【问题描述】:
我正在尝试创建一个包含基类元素的新类型向量。我所做的是将基类向量元素动态转换为派生类型,以便应用我在派生类中添加的一些方法。
这就是我大致所做的:
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 失败。谁能帮我解决这个问题。 提前致谢。
【问题讨论】:
-
请发布一个实际重现问题的最小代码,以便我们看到它。从您发布的 sn-p 很难看出 - 从概念上讲它没有任何问题(通常 - 它不会编译)。
-
您可以发布一个mvce,我们可以运行它并显示您的问题吗?
B->MyMethod()不会编译,你永远不会填充A。 -
好吧,
dynamic_cast是代码异味。您可能应该重新考虑您的设计。 -
这是整个代码吗?似乎不正确。 A 没有任何元素。同样为 m(
DerivedClass *m = new DerivedClass;) 完成的内存分配似乎没用。
标签: c++ iterator dynamic-cast