我正试图通过玩家手牌迭代。
Player.cpp
vector<Card*>::iterator iter;
for(iter = current_cards.begin(); iter != current_cards.end(); iter++) {
cout << iter->display_card() << endl;
}
中的iter
cout << iter->display_card() << endl;
目前提出“错误:表达式必须具有指针类型”。
同样,current_cards声明为:
vector<Card*>current_cards;
此外,display_card()方法只是:
Card.cpp
string Card::display_card(){
stringstream s_card_details;
s_card_details << "Colour: " << card_colour << "\n";
s_card_details << "Type: " << card_type << "\n";
return s_card_details.str();
}
我查看了各种资源,并且针对类似问题提出的所有建议都没有对我有用。谢谢你的帮助!
答案 0 :(得分:29)
试试这个:
cout << (*iter)->display_card() << endl;
*
运算符为您提供迭代器引用的项,在您的情况下是一个指针。然后使用->
取消引用该指针。
答案 1 :(得分:2)
您必须取消引用迭代器才能访问指针:
#include <vector>
#include <iostream>
class Card {
public:
std::string display_card();
};
int main() {
std::vector<Card*>current_cards;
std::vector<Card*>::iterator iter, end;
for(iter = current_cards.begin(), end = current_cards.end() ; iter != end; ++iter) {
std::cout << (*iter)->display_card() << std::endl;
}
}
另一个观察是iter++
,你应该避免++iter
的利润(见https://stackoverflow.com/a/24904/2077394)。
根据容器的不同,您可能还希望避免每次迭代调用end()。
(顺便说一句,总是有助于提供一个可重复的最小例子,就像我刚问你问的那样。)
答案 2 :(得分:1)
通过iter取消引用迭代器 - &gt;给出一个指向Card类型对象的指针,你必须写(* iter) - &gt; display_card();