我收到错误:

error C2682: cannot use 'dynamic_cast' to convert from 'std::_List_iterator<_Mylist>' to 'UserBean *'

执行时:
list<UserBean> * userBeans = getUserBeans();

for(list<UserBean>::iterator i = userBeans->begin(); i != userBeans->end(); i++)
   UserBean * newUser = dynamic_cast<UserBean*>(i);

我做错了什么,还是不能将迭代器项转换为对象?

最佳答案

有时迭代器被实现为指向容器项的原始指针,但更多时候,它们根本不是指针,所以不要那样对待它们。 正确的 访问迭代器引用的项目的方法是取消引用迭代器,例如:

UserBean &newUser = *i;

或者:
UserBean *newUser = &(*i);

迭代器通常会覆盖 -> 运算符,以便您可以访问引用项的成员,以防迭代器引用实际对象实例(您的实例)而不是指向对象实例的指针,例如:
i->SomeMemberHere

关于c++ - 无法将列表迭代器强制转换为对象,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16072486/

10-10 10:01