这是我第一次在 SO 上发帖,但我已经使用这里的答案和帮助一段时间了。
我现在正在开发一款简单的纸牌游戏,我断断续续地计划了几年。最终这将成为我学校的高级项目(不要求任何人为我做作业!)
我现在在尝试通过几个类将列表内容打印到控制台时遇到问题。
for(std::list<Card>::iterator it = Hand.begin(); it != Hand.end(); it++)
std::cout<< *it.GetName();
我想弄清楚这条线是不是
std::cout<< *it.GetName();
是否有效。我正在工作中进行故障排除,但我现在无法尝试任何事情。在今天早上我不得不放弃这个项目之前,我遇到了一些编译错误,这让我相信我需要重载我尝试过的 << 运算符,但由于某种原因最终导致了一些链接错误。
我一天中的大部分时间都在研究,但还没有遇到任何让我跳出来作为正确解决方案的情况,但这个小块是我发现的,对我来说似乎是最正确的我正在尝试做。
该 block 是否会像现在一样打印存储在 Hand 列表中的卡片对象的名称?是的,Card 类确实有 GetName() 函数并且声明正确。
最佳答案
*it.getName();
与
相同*(it.getName());
自 .
和函数调用的优先级高于一元 *
.所以编译器寻找一个成员 getName
在类里面std::list<Card>::iterator
,但没有一个:getName
是(我假设)Card
的成员, 并且迭代器与其对象没有任何继承或转发关系。
你可能是说
(*it).getName();
或等效地,
it->getName();
(箭头 ->
运算符只是取消引用然后命名成员的快捷方式。)
关于C++ std::list<T>::iterator 迭代器是否有权访问 <T> 成员函数?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20131994/