c++ - 你如何遍历一个向量并调用一个通用的覆盖函数?
问题描述
我有一个包含已继承宠物类(猫、狗、鱼等)的对象的向量。它们都有一个名为 play() 的通用覆盖函数,我想用迭代器调用该函数。
我收到一堆错误。我不确定我是否正确地创建了我的 for 迭代器。
代码片段:
void play_pets_x_Times (const std::vector<Pet*>& t, const int16_t x) {
int i=0;
while (i < x) {
for(std::vector<Pet*>::iterator it = t.begin(); it != t.end(); ++it) {
//error conversion from std::vector<Pet*>....
it->play(); //error request for member 'play' in....
}
i++;
}
}
解决方案
迭代器是类似指针的对象。
另一方面,您将指针存储在对象中,而不是实际对象。
所以,长话短说,你有 2 件事要取消引用,但只有 1 件要取消引用。
// (*it) dereferences the iterator to get a Pet*, -> dereferences the Pet*
(*it)->play();
这应该够了吧。
不,我错了。您需要 aconst_iterator
而不是const-correct:
std::vector<Pet*>::const_iterator it = t.begin();
推荐阅读
- r - 嵌套列表/ unnest_wider:逗号后丢失数字?
- web - Flutter WEB,布局模板。pop 返回 void 但期望 Bool
- python - 在 python 上制作的可执行文件的问题
- java - 在 Java 中绘制矩形
- php - 从帖子类型重定向非注册用户
- reactjs - 如何定期自动对焦元素 - React
- visual-studio - VS2015:无法将“System.__ComObject”类型的 COM 对象转换为接口类型“IFabricTestManagementClient4”
- ruby - 改变 Ruby 应用程序的架构,使其更加面向对象、可读性强
- java - SQL Join 两个表都为 WHERE 子句提供参数
- typescript - 如何选择可能具有可以为空的父母的嵌套类型