Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Qt и кроссплатформенное программирование С/С++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 07.06.2018, 08:31   #1
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию Не работает функция которая должна с json формата возвращать в стандартный

Я написал функцию которая должна возвращать с json формата в стандартный
Код:
std::unique_ptr<Component> Archiver::deserialise(const QJsonObject& jsonData)
{
    Test test;
    if ((*jsonData)["classType"] == ClassType::TEST)
    {
        test.mName = (*jsonData)["name"];
        QJsonArray children;
        for (decltype(test->numChildren()) childIndex = 0; childIndex < test->numChildren(); ++childIndex)
        {
            std::unique_ptr<Component> childComponent = deserialise(*jsonData);
            children.push_back(*childComponent);
        }
        test.mComponents = children;

        component = test;
        return component;
    }
    return nullptr;
}
Но она не работает( Много ошибок. Нужна ваша помощь.
dimaSlon вне форума Ответить с цитированием
Старый 07.06.2018, 09:35   #2
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Начните с того, что jsonData у вас объект и разыменовывать его не надо.
p51x вне форума Ответить с цитированием
Старый 07.06.2018, 09:37   #3
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Начните с того, что jsonData у вас объект и разыменовывать его не надо.
исправил
Код:
std::unique_ptr<Component> childComponent = deserialise(jsonData);
Как это правильно записать?
Код:
test.mName = (*jsonData)["name"];
Код:
children.push_back(*childComponent);
Код:
test.mComponents = children;
component = test;
        return component;

Последний раз редактировалось dimaSlon; 07.06.2018 в 09:40.
dimaSlon вне форума Ответить с цитированием
Старый 07.06.2018, 09:45   #4
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Мой клас Test
Код:
#pragma once

#include "CompositeComponent.h"
#include <memory>
#include <vector>
#include <QString>

class Test : public CompositeComponent
{
public:
    Test(QString name);

    const QString& name() const;
    void setName(QString name);

    void addChild(std::unique_ptr<Component> component);
    void removeChild(size_t index);
    size_t numChildren() const;
    Component* child(size_t index);
    const Component* child(size_t index) const;

private:
    QString mName;
    std::vector<std::unique_ptr<Component>> mComponents;
};
dimaSlon вне форума Ответить с цитированием
Старый 07.06.2018, 10:25   #5
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от dimaSlon Посмотреть сообщение
Как это правильно записать?
Убрать разыменование

Код:
test.mComponents = children;
У вас же поле приватное и функция для добавления есть в классе...
p51x вне форума Ответить с цитированием
Старый 07.06.2018, 10:30   #6
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
Убрать разыменование

Код:
test.mComponents = children;
У вас же поле приватное и функция для добавления есть в классе...
От так:
Код:
for (decltype(test.numChildren()) childIndex = 0; childIndex < test.numChildren(); ++childIndex)
        {
            std::unique_ptr<Component> childComponent = deserialise(jsonData);
            test.addChild(childComponent);
        }
А тут как написать?
Код:
 component = test;
        return component;

Последний раз редактировалось dimaSlon; 07.06.2018 в 10:41.
dimaSlon вне форума Ответить с цитированием
Старый 07.06.2018, 10:34   #7
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

так можна делать?
Код:
 if (jsonData["classType"] == ClassType::TASK)

Последний раз редактировалось dimaSlon; 07.06.2018 в 10:36.
dimaSlon вне форума Ответить с цитированием
Старый 07.06.2018, 10:40   #8
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Код:
 test.setName(jsonData["name"]);
а так можна?

Последний раз редактировалось dimaSlon; 07.06.2018 в 10:42.
dimaSlon вне форума Ответить с цитированием
Старый 07.06.2018, 10:45   #9
p51x
Старожил
 
Регистрация: 15.02.2010
Сообщений: 15,695
По умолчанию

Цитата:
Сообщение от dimaSlon Посмотреть сообщение
так можна делать?
А посмотреть описание класса? http://doc.qt.io/qt-5/qjsonobject.html У него есть подобный оператор. Если он делает то, что вам надо...

Цитата:
Сообщение от dimaSlon Посмотреть сообщение
а так можна?
А если посмотреть свой же код? И увидеть, что это геттер с двумя const. Можно ему присваивать?
p51x вне форума Ответить с цитированием
Старый 07.06.2018, 11:02   #10
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 160
По умолчанию

Цитата:
Сообщение от p51x Посмотреть сообщение
А посмотреть описание класса? http://doc.qt.io/qt-5/qjsonobject.html У него есть подобный оператор. Если он делает то, что вам надо...


А если посмотреть свой же код? И увидеть, что это геттер с двумя const. Можно ему присваивать?
bool QJsonObject:perator==(const QJsonObject &other) const вы про этот?
Код:
if (jsonData["classType"].operator ==( ClassType::TEST))
Где вы увидели
Код:
void setName(QString name);
тут const?

Последний раз редактировалось dimaSlon; 07.06.2018 в 11:16.
dimaSlon вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Написал программу, которая должна выводить среднее арифметическое ряда чисел, вроде все работает, но выводит какое-то левое число lfybbk Общие вопросы C/C++ 6 30.12.2016 11:33
Может ли функция возвращать множество значений? Алексей_2012 Помощь студентам 22 27.08.2015 13:19
Может ли функция возвращать массив? TzX Общие вопросы Delphi 4 20.09.2010 19:27
Как создать обратную функцию, которая из уникального номера будет возвращать строку? SkAndrew Общие вопросы Delphi 8 06.04.2008 21:10