通过指针向量迭代

Red*_*ift 15 c++ pointers vector object

我正试图通过玩家手牌迭代.

Player.cpp

vector<Card*>::iterator iter;
    for(iter = current_cards.begin(); iter != current_cards.end(); iter++) {
        cout << iter->display_card() << endl;
    }
Run Code Online (Sandbox Code Playgroud)

它在

cout << iter->display_card() << endl;
Run Code Online (Sandbox Code Playgroud)

目前提出"错误:表达式必须具有指针类型".

同样,current_cards声明为:

vector<Card*>current_cards;
Run Code Online (Sandbox Code Playgroud)

此外,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();
}
Run Code Online (Sandbox Code Playgroud)

我已经查看了各种资源,并且针对类似问题提出的所有建议都没有对我有用.谢谢你的帮助!

Ret*_*adi 33

试试这个:

cout << (*iter)->display_card() << endl;
Run Code Online (Sandbox Code Playgroud)

该*运营商给你的迭代器,而你的情况是一个指针引用的项目.然后你使用->dereference指针.


Jok*_*oky 5

您必须取消引用迭代器才能访问指针:

#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;
  }
}
Run Code Online (Sandbox Code Playgroud)

另一个观察是iter++您应该避免这样做++iter(请参阅/sf/answers/1743311/)。根据容器的不同,您可能还希望避免调用end()每个迭代。