首页 > 解决方案 > 你如何遍历一个向量并调用一个通用的覆盖函数?

问题描述

我有一个包含已继承宠物类(猫、狗、鱼等)的对象的向量。它们都有一个名为 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++;
}
}

标签: c++loopsinheritance

解决方案


迭代器是类似指针的对象。

另一方面,您将指针存储在对象中,而不是实际对象。

所以,长话短说,你有 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();

推荐阅读