使用boost迭代器适配器编译错误

时间:2010-02-01 09:03:40

标签: c++ stl boost iterator boost-iterators

我正在尝试使用boost迭代器适配器为CArray MFC类编写一个简单的STL迭代器。这是我的代码:

#include <boost/iterator/iterator_adaptor.hpp>
#include <afxtempl.h>

class CArrIter : public boost::iterator_adaptor< CArrIter , 
    int, 
    int,
    boost::random_access_traversal_tag >
{
public:
    CArrIter(CArray<int,int>& arr, int index = 0) : m_arr(arr)
    {
        this->base_reference() = index;
    }

private:
    friend class boost::iterator_core_access;
    int dereference() const{
        return m_arr.GetAt(base());
    }


private:
    CArray<int,int>& m_arr;
};

使用VC9编译器可以很好地编译。但是当我尝试使用VC7编译时,我收到以下错误:

  

\包括\升压\迭代\ iterator_traits.hpp(49)   :erro r C2039:'difference_type':是   不是。的成员   “增强::详细:: iterator_traits&LT;   迭代&GT;”           同           [               迭代器= INT           ]

     

\ include \ boost \ mpl \ eval_if.hpp(41):   请参阅类模板   实例   '提高:: iterator_difference'   bein g编译           同           [               迭代器= INT           ]

     

......还有一些......

任何可能出错的线索?我必须包含一些其他头文件?我很擅长推动图书馆。

2 个答案:

答案 0 :(得分:4)

我认为boost :: iterator_adaptor&lt;&gt;的第二个模板参数必须是一个有效的迭代器类型,尝试使用int *而不是int。

答案 1 :(得分:0)

它可能与随机访问行为有关,没有遍历容器所需的一切。此链接的“iterator_adaptor要求”部分可能有所帮助:

Boost: Iterator Adapter

我不确定int是否可赋值,所以我想知道如果将int更改为int&amp;会发生什么。

还有一些想法:

  • 您是否在两个编译器中使用相同版本的Boost库?
  • 取消引用()会受到保护还是公开帮助?