【问题标题】:iterator with custom object pointer list具有自定义对象指针列表的迭代器
【发布时间】:2014-01-06 00:46:42
【问题描述】:

我在这里列出了自定义对象,这是我的代码的一部分:

list<Carre*> mechants;
mechants.push_front(new Carre(joueur.getX()-1500,joueur.getY()+100));left = false;
for(list<Carre*>::iterator i=mechants.begin(); i != mechants.end(); ++i)
{
    *i->IA(joueur);
}

错误:在 '* i.std::_List_iterator<_tp>::operator->()' 中请求成员 'IA',它是指针类型 'Carre*'(也许你打算使用 '-> ' ?)|

也许问题是我列出了 Carre*,我应该尝试做一个 Carre 列表,但我不知道在这种情况下如何添加它们。 我已经尝试过 **i->IA(joueur) 没有成功; 我以前从未使用过自定义对象列表,所以我不知道该怎么做。

编辑:IA(Joueur) 是 Carre 类的函数

【问题讨论】:

    标签: c++


    【解决方案1】:

    *i-&gt;IA(joueur); 正在尝试做*(i-&gt;IA(joueur));

    你想要的是i周围的括号:

    (*i)-&gt;IA(joueur);

    【讨论】:

    • 谢谢,我想既然它是一个指针的指针,你的箭头不足以“保护它”免受编译器的误解。
    • @user3162867:问题是来自* 的取消引用被应用于IA 的返回值,而不是i,这就是需要括号的原因。正如您最初编写的那样,它与*((*i).IA(joueur)); 相同,但您真正想要的是(*(*i)).IA(joueur);(或等效的(*i)-&gt;IA(joueur);)。最初,*-&gt; 取消引用两个不同的东西(IA 的返回值和 i,分别),由于运算符优先级和关联性。添加括号确保i 被取消引用两次,并且IA 的返回值不会被取消引用。
    • 好的,我明白了,我不应该忘记的那种东西,谢谢你的帮助,请问如何让我的问题“解决”?
    • 在我的答案左侧,应该有一个复选标记。如果您单击它,它将接受此答案作为您问题的答案并将其标记为已解决。 :)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-11-10
    • 2014-04-29
    • 2020-04-28
    • 1970-01-01
    相关资源
    最近更新 更多