4

我得到错误:

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);

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

4

4 回答 4

12

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

UserBean &newUser = *i;

或者:

UserBean *newUser = &(*i);

迭代器通常会覆盖->操作符,以便您可以访问被引用项的成员,在迭代器引用实际对象实例(您的实例)而不是指向对象实例的指针的情况下,例如:

i->SomeMemberHere
于 2013-04-18T00:22:36.613 回答
5

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

不,你不能。您可以取消引用迭代器来访问对象:

UserBean & newUser = *i;
于 2013-04-18T00:21:57.423 回答
2

您不能将迭代器转换为这样的指针 - 这不是dynamic_cast目的。您应该只dynamic_cast在处理多态行为时使用(如果有的话)。但是,您可以这样做:

UserBean* newUser = &*i;

这将取消引用迭代器以获取对象,然后获取对象的地址。

于 2013-04-18T00:21:17.000 回答
0

你的容器类型list<UserBean>不是list<*UserBean>

这就是为什么你的迭代器是错误的。它的类型是UserBean. 不是UserBean*

UserBean userBean = *i;

或者

UserBean& userBean = *i;
于 2013-04-18T00:21:54.267 回答