この方法:
void LRU::displayQueue() const
{
for(iter = m_buffer.begin(); iter != m_buffer.end(); ++iter)
std::cout << (*iter) << " ";
std:: cout << std::endl;
}
次のエラーが発生します。
lru.cpp:58: error: passing 'const std::_Deque_iterator<int, const int&, const int*>' as 'this' argument of 'std::_Deque_iterator<int, const int&, const int*>& std::_Deque_iterator<int, const int&, const int*>::operator=(const std::_Deque_iterator<int, const int&, const int*>&)' discards qualifiers
m_buffer
ヘッダーファイルでiter
宣言されています。ここで、バッファーはdeque
of 型として宣言されてint
おりiter
、定数イテレーターです。
// ...
std::deque<int> m_buffer;
std::deque<int>::const_iterator iter;
// ...
const
メソッド内のを削除displayQueue
するとコンパイラ エラーが解消されますが、この関数は 内のデータを変更してはならないためdeque
、コードを "const-correct" に保つことでこれを明示的にしたいと考えています。イテレータが の場合、これがエラーになるのはなぜ const_iterator
ですか?