gpt4 book ai didi

C++:遍历泛型列表

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:17:47 24 4
gpt4 key购买 nike

再一次,我发现自己在与 C++ 语法作斗争。

我正在尝试遍历通用对象列表。那就是我有一个类的对象 Event<Q> , 塞进一个std::list<Event<Q> > .

所以我试图在列表上获取一个迭代器并且直觉上认为

std::list<Event<Q> >::iterator it;
for (it = events.begin(); it != events.end(); it++) { ... }

应该可以解决问题。但是,我不断收到这些错误:

..\calendar.h:48: error: expected `;' before "it"
..\calendar.h:49: error: `it' was not declared in this scope

有这么难的原因吗?

最佳答案

当然这应该有效,但听起来您正在执行以下一项或两项操作。

  • 拥有Q 模板参数或以其他方式依赖于它的类型(typedef 到它)。然后在std::list之前放一个typename,这样编译器就知道::iterator是一个类型,可以正确的进行分析(它可以是静态值成员)。知道它是一种类型,编译器可以为模板定义提供更好的诊断,并且您需要使用 typename 来判断它是否是一种类型。
  • events 常量列表。然后使用 const_iterator

更新:显示的编译错误肯定表明第一点是正确的:Q直接或间接依赖于模板参数,你必须把 typename 像这样:

typename std::list< Event<Q> >::iterator it;

编译器认为它是非类型的,因此它需要在 ::iterator 后面加上一些运算符或分号(例如乘法)。输入 typename 让它知道它命名了一个类型。

更新:参见Template FAQ对于类似的模板问题和解决方案。

关于C++:遍历泛型列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1571215/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com