不能将列表迭代器强制转换为对象
Cannot cast list iterator to an object
我得到了错误:
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
是我做错了什么,还是你不能将迭代器项转换为对象?
不,你不能。你可以解引用迭代器来访问对象:
UserBean & newUser = *i;
不能像这样将迭代器转换为指针——这不是dynamic_cast
的作用。你应该只使用dynamic_cast
当你处理多态行为(如果有的话)。但是,您可以这样做:
UserBean* newUser = &*i;
对迭代器解引用以获取对象,然后获取对象的地址。
您的容器类型是list<UserBean>
而不是list<*UserBean>
这就是为什么你的迭代器是错误的。其类型为UserBean
。不是UserBean*
.
UserBean userBean = *i;
或
UserBean& userBean = *i;
相关文章:
- 在nlohmann json中,如何将嵌套对象的数组转换为嵌套结构的向量
- 将父类对象强制转换为子类的问题
- 将方法转换为调用该方法的成员函子对象会导致崩溃
- 已转换对象的地址
- 如何在OpenGL中使用关键事件来转换对象
- 使用父类实例化的向下转换对象
- 静态强制转换允许转换对象指针,但不允许转换整数
- 为什么类型转换对象不会更改其地址?有关对象类型的信息存储在哪里?
- 找到对象类型后,是否可以使用 static_cast 强制转换对象
- 旨在复制/转换对象的功能系列的模板
- luabind 如何隐式强制转换对象
- 转换对象
- 使用隐式可转换对象调用move重载函数时的编译错误
- 关于在 cpp 中转换对象的两个问题
- 在运行时根据实例变量强制转换对象(c++)
- 使用用户定义的类型强制转换对象
- 在c++中转换对象
- 从"int"到非标量类型赋值运算符的转换 - 对象到 int
- 在屏幕上转换对象可编程管道
- 在 C 样式类型转换期间,关于强制转换对象的地址空间的实际情况