动态转换为矢量迭代器

时间:2016-03-18 04:26:10

标签: c++ casting

我有以下代码段 -

std::vector<cMyClass> myCls = GetClassValues();
std::vector<cMyClass>::const_iterator imyCls;
for( imyCls = myCLs.begin(); imyCls != myCls.end(); ++imyCls)
{
  cMyClass *cls = dynamic_cast<cMyClass*>(*imyCls);//C2682


}

在for循环中我希望有cMyClass的指针变量,我不能使用直接赋值或静态强制转换。所以使用dynamic_cast但似乎也没有用。

如果我想让它工作,我有什么选择。

2 个答案:

答案 0 :(得分:3)

您可以使用

cMyClass *cls = &*imyCls;

*imyCls是对vector中对象的引用; &*imyCls就是那个地址。

答案 1 :(得分:1)

首先,您尝试从引用中获取指针,您必须在迭代器解除引用之前添加&,如下所示:&*myCls。此外,由于您使用的是const_iterator,因此只能获取const指针。将imyCls更改为非const迭代器,或将强制转换为const指针版本。

cMyClass const *cls = dynamic_cast<cMyClass const*>(&*imyCls);