繁体   English   中英

class 模板“std::iterator”的参数列表丢失

[英]argument list for class template “std::iterator” is missing

argument list for class template "std::iterator" is missing

我在这个场合得到这个错误:

for(std::iterator it = deque.begin(); it != deque.end(); it++)

所以我有一个以模板方式指定的想法,如下所示:

for(std::iterator<sf::RectangleShape> it = deque.begin(); it != deque.end(); it++)

但后来我得到不同的错误:

expected a declaration

我对这里发生的事情有点困惑。 我需要的只是迭代器,因为这样我可以到达std::deque的最后一个元素并将其设置为不同的矩形颜色。

提前致谢。

假设您要遍历std::deque<sf::RectangleShape>std::deque<sf::RectangleShape>容器的非const成员函数begin()end()返回的类型既不是std::iterator也不是std::iterator<sf::RectangleShape>但实际上是std::deque<sf::RectangleShape>::iterator

for (std::deque<sf::RectangleShape>::iterator it = deque.begin(); it != deque.end(); ++it)

正如其他答案中已经建议的那样,您可以,因为 C++11,只需依靠auto

for (auto it = deque.begin(); it != deque.end(); ++it)

正如您可能已经注意到的那样,必须只编写auto而不是std::deque<sf::RectangleShape>::iterator可能不太容易出错。 更好的是,当您遍历整个容器时,您可以,因为 C++11,只需使用range-for 循环

for (auto& elem: deque)

在这种情况下, elem不是deque元素的迭代器,而是对元素本身的引用(即sf::RectangleShape& )。

尝试使用auto声明迭代器:

for (auto it = deque.begin(); it != deque.end(); it++)

让编译器为它决定合适的类型。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM