Container - Iterator ++it
Hello
I am trying to create a container. But I have a problem with my iterator.
I can print everything out using a for statement it->getNext(). So I know my container/iterator works.
But when I am using ++it I get a segfault. (bold)
I know my operator++ is wrong but I dont know how to make it work.
Can someone help me?
Thank you
Code:
#include <iostream>
using namespace std;
#include <string>;
class Artikel{
public:
Artikel(){}
Artikel(string m_naam, float m_prijs)
:naam(m_naam), prijs(m_prijs){}
Artikel(const Artikel &other)
{
naam = other.naam;
prijs = other.prijs;
}
string getNaam()
{
return naam;
}
float getPrijs()
{
return prijs;
}
friend ostream& operator<<(ostream &out, const Artikel &k)
{
out << k.naam << " " << k.prijs << endl;
return out;
}
private:
string naam;
float prijs;
};
class Iterator{
public:
Iterator(Artikel *m_current = NULL, Iterator *m_next = NULL){
next = m_next;
if(m_current != NULL)
current = new Artikel(*m_current);
else
current = NULL;
}
Iterator(const Iterator&other)
{
cout << "copy iterator\n";
current = new Artikel(*other.current);
next = other.next;
}
Iterator* getNext()
{
return next;
}
Artikel& getArtikel()
{
return *current;
}
void setNext(Iterator *it)
{
next = it;
}
bool operator!=(const Iterator& other)
{
if(current == other.current)
return false;
else
return true;
}
friend ostream& operator<<(ostream &out, const Iterator&k)
{
out << k.current->getNaam() << k.current->getPrijs() << endl;
return out;
}
Iterator& operator++()
{
*this = *next;
this->current = next->current;
return *this;
}
private:
Iterator *next;
Artikel *current;
};
class Container{
public:
Iterator* getTail()
{
return tail;
}
Iterator* getHead(){
return head;
}
void Add(Artikel *a);
Container(){
head = NULL;
tail = new Iterator();
}
private:
Iterator *tail, *head;
};
void Container::Add(Artikel *a)
{
if(head == NULL)
{
head = new Iterator(a, tail);
} else {
Iterator *it = head;
while(it->getNext() != tail)
{
it = it->getNext();
}
Iterator *add = new Iterator(a, tail);
it->setNext(add);
}
}
int main(void){
Artikel a1("Karskall ", 12.45);
Artikel a2("Alfa-beta ", 1.12);
Artikel a3("dijkstra ", 45.23);
Artikel a4("Floyd ", 1003.34);
Container c;
c.Add(&a1);
c.Add(&a2);
c.Add(&a3);
c.Add(&a4);
Iterator *it;
/* WORKS
for(it = c.getHead(); it != c.getTail(); it = it->getNext())
{
cout << *it;
}
*/
for(it = c.getHead(); it != c.getTail(); ++it)
{
cout << *it;
}
return 0;
}