Ошибки со структурой С++

269
05 октября 2017, 13:33

Здравствуйте, у меня есть бинарный файл где находятся int значения, каждый из которых занимает 4 байта. Я хочу с помощью данной структуры пройти через файл и вывести значения в консоль.

#include <iostream>
#include <cstdio>

using namespace std;

class IntFile
{
public:
    //int index = 0;
    int value;
    FILE* file;
    IntFile() {}
    ~IntFile() {}
    int mnumbers[10];
    int mnumbers2[10];
    // get value from current index in file
    int getValue(int index)
    {
        fseek(file, 4*index, SEEK_SET);
        fread(&value, 4, 1, file);
        return value;
    }
    friend struct Move;
    struct Move
    {
        int index = 0;
        int value = 0;
        bool operator==(const Move&other) const
        {
            return index == other.index;
        }
        bool operator!=(const Move&other) const
        {
            return index!=other.index;
        }
        int &operator*()
        {
            return value = IntFile::getValue(int index);
        }
        Move&operator++()
        {
            this->index = index+1;
            return *this;
        }
        Move&operator--()
        {
            this->index = index -1;
            return *this;
        }
    };
    Move begin()
    {
        fseek(file, 0, SEEK_SET);
        //index = 0;
    }
    Move end()
    {
        fseek(file, 0, SEEK_END);
        //index = 9;
    }
};

int main()
{
    IntFile file;
    int A;

    for ( int i = 0; i < 10; i++)
    {
        file.mnumbers2[i] = 0;
        cout << file.mnumbers2[i] << " ";
    }

    file.file = fopen("text.txt", "r+b");
    for (IntFile::Move Iter = file.begin(); Iter != file.end(); ++Iter)
    {
        fread(file.mnumbers2,4,1,file.file);
        cout << " I " << endl;
        //cout << "Iterator: " << Iter;
    }
    cout << endl;
    A = file.getValue(5);
    cout << "A: " << A << endl;
    for ( int i = 0; i < 10; i++)
    {
        cout << file.mnumbers2[i] << " ";
    }
    ////////////////////////////////////////
    fclose(file.file);
    return 0;
}

Но я не захожу в данный цикл

 for (IntFile::Move Iter = file.begin(); Iter != file.end(); ++Iter)
    {
        fread(file.mnumbers2,4,1,file.file);
        cout << " I " << endl;
        //cout << "Iterator: " << Iter;
    }

А также чувствую, что begin() , end() работают не правильно. Люди советовали, что они обязательно должны что-то возвращать, но в другой аналогичной программе, begin() и end() ничего не возвращали. А также, operator* не работает, expecter primary... . Нужно что-то сделать static? Заранее спасибо.

READ ALSO
Конвертация кириллицы из QByteArray в QString

Конвертация кириллицы из QByteArray в QString

Доброго времени суток!

366
Функция SlideUp при фиксированном меню

Функция SlideUp при фиксированном меню

Эффект: текст выезжает снизу и не заезжает за меню, а останавливается на расстоянии, равном высоте меню + десятка пикселей, чтобы отступ был...

354
Парсинг свойства из json

Парсинг свойства из json

Не могу понять почему получаю undefined когда обращаюсь напрямую к переменной, или что я делаю не так?

319
Якорь и шапка сайта

Якорь и шапка сайта

Доброго времени суток! Столкнулся с небольшой проблемойЕсть html страница, на ней расположена шапка

472