Проблема: не могу вывести числа которые лежат в массиве. Думал, что в методе value нужно писать return *array[current], но получаю:
error: indirection requires pointer operand ('int' invalid)
Если убрать «разыменовыватель» return array[current] то я получаю мусор в выводе
1359699216 32767 0 0 1359699224 32767 1359699252 32767 1359699268 32767
Внутри конструктора я «для эксперимента» вписывал цикл, выводящий массив — выводит все очень хорошо. Но когда я пробую возвращать значение через функцию то получаю мусор.
Мне тяжко даются указатели и ссылки, все время путаюсь в них. Если не сложно, можете дать статейку где доступно все расписано?
Реализация:
ArrayIterator.cpp
#include <iostream> class ArrayIterator { private: int *array; int current; int size; public: ArrayIterator(int *array, int size) { this->size = size; this->current = 0; } void next() { if ( over() ) { return; } current += 1; } bool over() { int last = size - 1; return current > last; } int operator[](int index) { return array[index]; } int value() { return array[current]; } };main.cpp:
#include "ArrayIterator.cpp" int main() { int array[10] = { 10, 20, 30, 40, 50, 60, 70, 80, 90, 100 }; ArrayIterator seq(array, 10); for ( ; !seq.over(); seq.next() ) { std::cout << seq.value() << std::endl; } return 0; }
array. – Dec 04 '15 at 12:27array— массив/указатель,array[current]— элемент массива, а не указатель на элемент. Разыменование не нужно. О причине ошибки смотрите предыдущий комментарий. – VladD Dec 04 '15 at 12:30