迭代器的声明:"does not contain a type"

Declaration of iterator: "does not contain a type"

本文关键字:contain type not does 声明 迭代器      更新时间:2023-10-16

我很难理解为什么会出现此错误。我指的是Josuttis的STL书和其他资源,似乎我在下面声明迭代器的方式应该有效:

#ifndef LRU_H
#define LRU_H
#include <queue>
#include <iterator>

class LRU
{
public:
   LRU();                           // default constructor
   LRU(int);                        // constructor with argument
   ~LRU();                          // destructor 
   // Methods
   //
   void enqueue(int);               // add datum to the queue
   void dequeue();                  // remove datum from the queue
   void replace();                  // replacement algorithm
   void displayQueue() const;       // display contents of queue
private:
   // Member Data
   //
   const int MAX_SIZE;
   int m_currentCount;
   std::queue<int> m_buffer;
   std::queue<int>::const_iterator iter;
};
#endif

但是我声明const_iterator的行生成以下编译器错误:

In file included from main.cpp:10:
lru.h:41: error: 'const_iterator' in class 'std::queue<int, std::deque<int, std::allocator<int> > >' does not name a type
In file included from lru.cpp:10:
lru.h:41: error: 'const_iterator' in class 'std::queue<int, std::deque<int, std::allocator<int> > >' does not name a type
lru.cpp: In constructor 'LRU::LRU()':
lru.cpp:17: error: class 'LRU' does not have any field named 'm_pos'
lru.cpp: In constructor 'LRU::LRU(int)':
lru.cpp:23: error: class 'LRU' does not have any field named 'm_pos'
Compilation exited abnormally with code 1 at Thu Nov 15 10:47:31

在导致错误的类中声明迭代器有什么特别之处吗?

容器

适配器std::queue没有可公开访问的迭代器。由于std::queue<int>隐藏在LRU实现中,因此可以考虑改用std::deque<int>std::dequestd::queue使用的默认容器,因此使用它不会对性能造成任何影响。我认为只要您不在您的LRU界面中公开非队列操作,使用它就是安全的。