我收到错误:
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);
我做错了什么,或者你不能将迭代器项转换为对象吗?
答案 0 :(得分:12)
有时候迭代器被实现为容器项的原始指针,但有时候它们根本不是指针,所以不要那样对待它们。访问迭代器引用的项的正确方法是取消引用迭代器,例如:
UserBean &newUser = *i;
或者:
UserBean *newUser = &(*i);
迭代器通常会覆盖->
运算符,因此您可以访问引用项的成员,如果迭代器引用实际的对象实例(您执行此操作)而不是指向对象实例的指针,例如:
i->SomeMemberHere
答案 1 :(得分:5)
不,你不能。您可以取消引用迭代器来访问对象:我做错了什么,或者你不能将迭代器项转换为对象吗?
UserBean & newUser = *i;
答案 2 :(得分:2)
你不能将迭代器转换为这样的指针 - 这不是dynamic_cast
的用途。在处理多态行为时(如果有的话),您应该只使用dynamic_cast
。但是,您可以这样做:
UserBean* newUser = &*i;
取消引用迭代器以获取对象,然后获取对象的地址。
答案 3 :(得分:0)
您的容器类型为list<UserBean>
而不是list<*UserBean>
这就是你的迭代器错误的原因。它的类型是UserBean
。不是UserBean*
。
UserBean userBean = *i;
或
UserBean& userBean = *i;