C++ std::list<T>::iterator 迭代器是否有权访问 <T> 成员函数?

标签 c++ iterator stdlist

这是我第一次在 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/

相关文章:

java - 迭代器在使用下一个函数时出现问题

iterator - 无限期地重复 Julia 迭代器

c++ - std::prev 和 std::next 对 std::list 的有效性

c++ - 为什么删除列表的_first_ 元素会使 `.rend()` 无效?

c++ - 删除指针时出现段错误(核心已转储)

python - 在 Python 中实现深度优先树迭代器

c++ - 如果传递两个相同的指针作为输入,memcmp 会做什么?

c++ - 删除多个列表指向的数据?

c++ - 在构造函数中创建的外部 vector

c++ - 为什么派生*到基*之间的转换会因私有(private)继承而失败?