Я работаю над финальным проектом для класса и пытаюсь использовать библиотеку зерновых для сериализации структуры, содержащей вектор векторов структур другого типа, но это не удается.Другой (содержащийся в векторе) тип структуры имеет функцию сериализации, которая работает (проверена).Когда я пытаюсь сериализовать и десериализовать контейнерную структуру, я получаю сообщение об ошибке «Не удалось прочитать 8 байтов из входного потока! Чтение 0»
Я успешно сериализовал другую структуру, которая содержит вектор векторов структур, поэтомуЯ знаю, что это должно быть возможно.Когда я сделал это, все строки, которые были в структуре в векторах, можно было увидеть в файле, в который я сохранил вывод.Однако, когда я сериализовал структуру контейнера для этого проекта, результирующий файл содержит только строки первых двух внутренних структур в первом подвекторе вектора в классе контейнера.(например: содержит struct.vec [0] [0] .string и struct.vec [0] [1] .string, но не любые из 14 других).
В верхней части файласодержащий структуру контейнера, у меня есть
#include <vector>
#include <string>
#include <random>
#include "region.h"
#include "constants.h"
#include "cereal/archives/binary.hpp"
#include "cereal/types/vector.hpp"
#include "cereal/types/string.hpp"
Он имеет следующие переменные-члены (переименован здесь).Region - это структура с работающей функцией сериализации .:
vector<vector<Region>> game_map;
int x;
int y;
Функция сериализации контейнера (Country):
template<class Archive>
void serialize(Archive &archive) {
archive(game_map, x, y);
}
Это код, выдающий ошибку:
TEST_CASE("Serialize manually created country", "[serialize]") {
Here, I create a vector of vectors of Regions called new_game_map, and I think I did so correctly, as I used it to create country later and that had the right values for everything (checked with printing).
{ //First creating country object, serializing it, and saving it to a file
stringstream ss;
cereal::BinaryOutputArchive oarchive(ss);
Country country;
country.game_map = new_game_map;
country.x = 49;
country.y = -3;
oarchive(country);
ofstream output_stream;
output_stream.open("test_cereal_save_file.txt");
string save;
ss >> save;
output_stream << save;
output_stream.close();
}
{ //Now getting saved data and turning it back into a country object, then checking that it equals original.
stringstream ss;
string save;
ifstream input_stream;
input_stream.open("test_cereal_save_file.txt");
input_stream >> save;
ss << save;
input_stream.close();
cereal::BinaryInputArchive iarchive(ss);
Country country;
iarchive(country);
Country expected_country;
expected_country.game_map = new_game_map;
expected_country.x = 49;
expected_country.y = -3;
REQUIRE(expected_country == country);
}
Я ожидаю, что страна, созданная с зерновыми, будет равна той, которую я создал позже, но это не так.Он не содержит переменных, и Catch2 выдает ошибку «Не удалось прочитать 4 байта из входного потока! Чтение 0»