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指针.
您必须取消引用迭代器才能访问指针:
#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()每个迭代。