Выдается исключение, место чтения нарушения прав доступа. Я отлично перегрузил все операторы и не знаю, почему это происходит. L oop отлично работал в учебнике, но он не работает в моей системе. Пожалуйста, помогите мне, вот код -
Это определено мной - ring.h
#pragma once
#ifndef RING_H_
#define RING_H_
#include<iostream>
using namespace std;
template<class T>
class ring
{
private:
int m_pos;
T* m_values;
int m_size;
public:
class iterator;
public:
ring(int size) : m_pos(0), m_size(size), m_values(NULL)
{
m_values = new T[size];
}
~ring()
{
delete[] m_values;
}
int size()
{
return m_size;
}
iterator begin()
{
return iterator(0, *this);
}
iterator end()
{
return iterator(m_size-1, *this);
}
void add(T value)
{
m_values[m_pos++] = value;
if (m_pos == m_size)
{
m_pos = 0;
}
}
T& get(int pos)
{
return m_values[pos];
}
};
template<class T>
class ring<T>::iterator
{
private:
int m_pos;
ring m_ring;
public:
iterator(int pos, ring &aRing): m_ring(aRing), m_pos(pos) {}
iterator& operator++(int)
{
m_pos++;
return *this;
}
T& operator*()
{
return m_ring.get(m_pos);
}
bool operator!=(const iterator& other) const
{
return m_pos != other.m_pos;
}
};
#endif //RING_H_
А вот файл, содержащий основную функцию - (source. cpp)
#include<iostream>
#include"ring.h"
using namespace std;
int main()
{
ring<string> textring(3);
textring.add("One");
textring.add("Two");
textring.add("Three");
for (ring<string>::iterator it = textring.begin(); it != textring.end(); it++)
{
cout << *it << endl;
}
cout << endl;
/*for (string value : textring)
{
cout << value << endl;
}*/
}