簡體   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