Donc je voulais écrire le code pour mon mini jeu et besoin de lire un fichier json pour la configuration du joueur. Pour cela, j'ai utilisé la bibliothèque cereal.
Mon code m'a donné une erreur, donc je l'ai réduit à un exemple plus simple mais j'ai toujours eu une erreur.
Mon code :
#include <cereal/types/map.hpp>
#include <cereal/types/string.hpp>
#include <cereal/archives/json.hpp>
#include <string>
#include <map>
#include <iostream>
#include <fstream>
struct Item {
std::string name;
int number;
template <class Archive>
void serialize(Archive &ar) {
ar(cereal::make_nvp("name", name), cereal::make_nvp("number", number));
}
};
int main() {
std::map<std::string, Item> items;
std::ifstream file("dataForTesting.json");
if (!file.is_open()) {
std::cerr << "Impossible d'ouvrir le fichier !" << std::endl;
return 1;
}
try {
cereal::JSONInputArchive archive(file);
archive(items);
} catch (const cereal::Exception& e) {
std::cerr << "Erreur lors de la désérialisation du JSON : " << e.what() << std::endl;
return 1;
} catch (const std::exception& e) {
std::cerr << "Une erreur s'est produite : " << e.what() << std::endl;
return 1;
}
for (const auto& item : items) {
std::cout << "ID de l'item : " << item.first
<< "\nNom : " << item.second.name
<< "\nNombre : " << item.second.number << "\n" << std::endl;
}
return 0;
}
Mon fichier json :
{
"item1": {
"name": "Objet Un",
"number": 1
},
"item2": {
"name": "Objet Deux",
"number": 2
},
"item3": {
"name": "Objet Trois",
"number": 3
}
}
J'ai compilé via $ c++ testingTesting.c++ -o test -std=c++11 -I.
et exécuté via $ ./test
et voici une erreur que j'ai obtenue Erreur lors de la désérialisation du JSON: échec de l'assertion interne de rapidjson : IsArray()