C++ 动态转换到向量迭代器
我有下面的片段-C++ 动态转换到向量迭代器,c++,casting,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 } 在
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,我不能使用直接赋值或静态强制转换。因此,使用动态_cast,但这似乎也不起作用
如果我想让它工作,我有什么选择。您可以使用
cMyClass *cls = &*imyCls;
*imyCls是对向量中对象的引用&*imyCls是它的地址。您可以使用
cMyClass *cls = &*imyCls;
*imyCls是对向量中对象的引用&*imyCls是它的地址。首先,您试图从引用中获取指针,您必须在迭代器取消引用之前添加&如下所示:&*myCls。此外,由于您使用的是常量迭代器,因此只能获取常量指针。将imyCls更改为非常量迭代器,或将强制转换更改为常量指针版本
cMyClass const *cls = dynamic_cast<cMyClass const*>(&*imyCls);
首先,您试图从引用中获取指针,必须在迭代器取消引用之前添加:&*myCls。此外,由于您使用的是常量迭代器,因此只能获取常量指针。将imyCls更改为非常量迭代器,或将强制转换更改为常量指针版本
cMyClass const *cls = dynamic_cast<cMyClass const*>(&*imyCls);