ошибка увеличения входного потока.Как сохранить динамический вектор STD: векторов в виде XML-файла - PullRequest
0 голосов
/ 02 февраля 2019

Я пытаюсь сохранить

vector<vector<int>> 

в виде XML-файла.векторы будут динамически изменяемого размера.Я пытался использовать BOOST: SERIALIZATION, но я получаю эту ошибку. libc ++ abi.dylib: завершается с необработанным исключением типа boost :: archive :: archive_exception: ошибка входного потока

Я не вижу проблем с моим кодом.Другой метод, кроме повышения, чтобы сохранить как XML, будет хорошо, если кто-то может предложить один.


#include <iostream>
#include <vector>
#include <iostream>
#include <fstream>
#include <boost/serialization/serialization.hpp>
#include <boost/serialization/vector.hpp>
#include <boost/archive/text_oarchive.hpp>
#include <boost/archive/text_iarchive.hpp>

using namespace std;


int main() {
    using namespace std;
    int numChords;

    vector<vector<int> > chords; // array to store chord arrays
    numChords = 2; // size of outer array
    chords = {{41, 48, 55, 56, 58, 63},
              {44, 51, 56, 58, 61, 63}}; // data structure

    // print the array
    cout << endl << "you entered: " << endl;
    // print the results
    for (int i = 0; i < numChords; i++) {
        for (int j = 0; j < chords[i].size(); j++) {
            cout << chords[i][j] << ",";
        }
        cout << endl;
    }

    // store the array to a file
    std::ofstream ofs("dump.dat");
    boost::archive::text_oarchive oa(ofs);
    oa & chords;

    chords.clear(); // clear the original array
    // restore the array from the file
    std::ifstream ifs("dump.dat");
    boost::archive::text_iarchive ia(ifs);
    ia & chords;

    cout << endl << "you saved: " << endl;
    // print the restored array
    for (int i = 0; i < numChords; i++) {
        for (int j = 0; j < chords[i].size(); j++) {
            cout << chords[i][j] << ",";
        }
        cout << endl;
    }

    return 0;
}

Я пробовал разные имена файлов и пути к файлам.Я попытался использовать & или << >> после заявления о повышении.

Полный вывод


you entered: 
41,48,55,56,58,63,
44,51,56,58,61,63,
libc++abi.dylib: terminating with uncaught exception of type boost::archive::archive_exception: input stream error

Process finished with exit code 6

Заранее благодарим за любые советы.

Шон

1 Ответ

0 голосов
/ 02 февраля 2019

Заключение операций вывода и ввода в поток фигурными скобками:

{ //<--
  // store the array to a file
  std::ofstream ofs("dump.dat");
  boost::archive::text_oarchive oa(ofs);
  oa & chords;
}

chords.clear(); // clear the original array

{ // <--
  // restore the array from the file
  std::ifstream ifs("dump.dat");
  boost::archive::text_iarchive ia(ifs);
  ia & chords;
}

Здесь является ссылкой на исключения, которые генерируются boost :: archive .Ниже предложение относится к input/output stream error:

Убедитесь, что выходной архив в потоке уничтожен, прежде чем открывать входной архив в этом же потоке.

Если это условиене выполнено, вы получите исключение.

...