![]() |
Здравствуйте, гость ( Вход | Регистрация )
![]() ![]() |
![]() |
Not_Once |
![]()
Сообщение
#1
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 13.3.2014 Пользователь №: 4076 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
Доброго времени суток! Не судите строго - опыта мало. Вообщем, нужна помощь, уже в конец запутался. Весь проект, естественно тащить не буду, попытаюсь на примере.
Допустим, имею: 1) Класс Cube c разнородной информацией и де-/сериализатором для потока. Раскрывающийся текст
2) Класс Data с объявленным вектором указателей на объекты Cube и методами записи/чтения в данных из/в файл Раскрывающийся текст
3)В QDaraStream предусмотрены де-/сериализатор для QVector: Раскрывающийся текст
4)Основное окно, с общей информацией, откуда вызываю запись и чтение данных Раскрывающийся текст
При текущем варианте, данные пишутся и читаются в десериализаторе Cube, но сам вектор забивается последним объектом и программа вылетает. Я уже вконец запутался с указателями и объектами. Вопрос: подскажите, что делаю не так? |
|
|
Trisch |
![]()
Сообщение
#2
|
![]() Активный участник ![]() ![]() ![]() Группа: Участник Сообщений: 379 Регистрация: 30.1.2012 Из: Запорожье Пользователь №: 3169 Спасибо сказали: 24 раз(а) Репутация: ![]() ![]() ![]() |
Я вот тоже в указателях иногда путаюсь. Но вот думаю что проблема может быть тут:
сделайте так:
правильный вариант зависит от того что вам надо. |
|
|
Not_Once |
![]()
Сообщение
#3
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 13.3.2014 Пользователь №: 4076 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
сделайте так:
правильный вариант зависит от того что вам надо. Спасибо за ответ ![]() Мне нужен именно Вектор Указателей, который будет хранить объекты Cube. А вот объектом:
или указателем:
реализовывать - я не знаю. Попробовал вариант с объектом (QVector<Cube*> Data_Cubes) - ничего не изменилось ![]() К сожалению ошибку допустил в описании проблемы, а именно класса Cube(для де-/сериализации подкладываю не объект Cube а указатель на него, того требует описанная де-/сериализация в QDatastream): Раскрывающийся текст
|
|
|
Iron Bug |
![]()
Сообщение
#4
|
![]() Профессионал ![]() ![]() ![]() ![]() ![]() Группа: Модератор Сообщений: 1611 Регистрация: 6.2.2009 Из: Yekaterinburg Пользователь №: 533 Спасибо сказали: 219 раз(а) Репутация: ![]() ![]() ![]() |
сериализация не работает с указателями. хранить указатели в файле - это безумие. сериализация работает только с объектами. поэтому сериализовать/десериализовать нужно сами объекты, а массив указателей создавать параллельно этому процессу, добавляя указатели на десериализованные объекты по мере их создания.
|
|
|
Not_Once |
![]()
Сообщение
#5
|
Новичок Группа: Новичок Сообщений: 3 Регистрация: 13.3.2014 Пользователь №: 4076 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
сериализация не работает с указателями. хранить указатели в файле - это безумие. сериализация работает только с объектами. поэтому сериализовать/десериализовать нужно сами объекты, а массив указателей создавать параллельно этому процессу, добавляя указатели на десериализованные объекты по мере их создания. Огромное спасибо! ![]() Переделаю - отпишусь. |
|
|
liamm |
![]()
Сообщение
#6
|
Новичок Группа: Новичок Сообщений: 1 Регистрация: 26.4.2014 Пользователь №: 4113 Спасибо сказали: 0 раз(а) Репутация: ![]() ![]() ![]() |
У меня тоже была необходимость сериализовать вектор указателей (назовем его QVector<SomeClass*> myVector), решение выглядит так:
операторы для сериализации/десериализации объекта по указателю:
сериализация вектора (сначала записываем в поток число элементов, потом данные для самих элементов)
десериализация вектора (сначала вытаскиваем число элементов, потом данные для самих элементов, и заполняем на их основе вектор) :
|
|
|
![]() ![]() ![]() |
![]() |
|
Текстовая версия | Сейчас: 9.5.2025, 7:26 |