Я реализовал тривиальный класс MyClass
, у которого есть массив, выделенный в нем new
(я знаю, что могу использовать контейнер STL, но я пытаюсь понять, как они работают). Я также создал итератор подкласс, способный итерацию по всем элементам MyClass
объекта:Невозможно получить BOOST_FOREACH для работы с моим пользовательским классом
class MyIterator : public iterator<forward_iterator_tag,int>
{
private:
int* data= nullptr;
int length;
int pointer=0;
int nullvalue=0;
public:
MyIterator(int* data, int length, bool end= false)
{
this->data= data;
this->length= length;
if(end)
pointer=-1;
}
~MyIterator()
{
delete[] data;
}
MyIterator& operator++()
{
if(pointer!= length-1)
{
pointer++;
}
else
{
pointer= -1;
}
return *this;
}
bool operator==(const MyIterator& other)
{
return pointer==other.pointer;
}
bool operator!=(const MyIterator& other)
{
return pointer!= other.pointer;
}
int& operator*()
{
if(pointer==-1)
return nullvalue;
else
return data[pointer];
}
};
class MyClass
{
private:
int* data= nullptr;
int length= 100;
public:
MyClass()
{
data= new int[length];
for(int i=0; i<length;i++)
data[i]=i+1;
}
iterator<forward_iterator_tag,int> begin()
{
return MyIterator(data,length);
}
iterator<forward_iterator_tag,int> end()
{
return MyIterator(data,length,true);
}
};
Хотя итератор работает, если я использую это так:
for(MyIterator i= MyClass_instance.begin(); i!=MyClass_instance.end();i++) {...}
Это не работает, если Я стараюсь использовать его с BOOST_FOREACH:
BOOST_FOREACH(int i, MyClass_instance) {...}
Эти ошибки, которые я получаю:
рабочий образец ** [Live On Coliru] (http: //coliru.stacked-crooked.com/a/5aded9c74b968671) ** – sehe
Я получаю непонятную синтаксическую ошибку: «Нет соответствующей функции для вызова« deref »», в той же строке, где вы вызываете BOOST_FOREACH. Проблема заключается в структуре с именем struct __iterator_traits_impl <_Iter, true>, внутри заголовка итератора STL. –
@RamyAlZuhouri интересно. Вы заметили живой концерт? У меня возникнет соблазн предположить, что вы делаете что-то другое. Я не могу действительно рассуждать о коде, который вы не показываете. – sehe