Редактировать: Название вопроса основывалось на глубоком непонимании ошибки компилятора, которую я получил. Я был (глупо), предполагая, что ошибка была, что я попытался десериализовать объект, объявленный внутри функции. Это было совершенно неправильно. Я не делал достаточных усилий для отладки самостоятельно, или я мог бы узнать, что случилось. Таким образом, заголовок был довольно промахом, и я изменил его. Спасибо Андрей Беньковский за помощь.Cereal не поддерживает исходные указатели
Я пишу Serialization функцию для 3D-моделей в моем двигателе с использованием зерновых, что доказывает быть действительно эффективными и простым в использовании. До сих пор все работало отлично, когда я тестировал (де-) сериализацию простой Mesh. Но теперь я пытаюсь десериализовать другой класс, но столкнулся с проблемой, которую я не получаю.
void loadFile(std::string filepath)
{
DescriptionFile file;
{
ifstream stream = ifstream(filepath, std::ifstream::binary);
PortableBinaryInputArchive archive(stream);
archive(file);
stream.close();
}
}
Это мой класс, который должен быть десериализован:
struct DescriptionFile
{
public:
DescriptionFile(){}
map<string, MeshDescription*> meshDescriptions;
map<string, ModelDescription*> modelDescriptions;
public:
template<class Archive>
void serialize(Archive & archive)
{
archive(meshDescriptions, modelDescriptions);
}
};
Это дает мне компилятор ошибки: Cereal не поддерживает сериализацию сырые указатели - пожалуйста, используйте смарт-указатель Несмотря на то, что это не указатель. В другой части кода что-то подобное работает отлично. Я был бы рад, если бы кто-нибудь помог мне решить эту проблему.
'filepath' является' std :: string'? Измените свой вопрос, чтобы указать тип. –
[using namespace is evil] (https://isocpp.org/wiki/faq/coding-standards#using-namespace-std) –