Форум программистов
 
Контакты: о проблемах с регистрацией, почтой и по другим вопросам пишите сюда - alarforum@yandex.ru, проверяйте папку спам! Обязательно пройдите активизацию e-mail.

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

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

Ответ
 
Опции темы
Старый 07.06.2018, 09:31   #1
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 153
Репутация: 10
По умолчанию Не работает функция которая должна с 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, 10:35   #2
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,034
Репутация: 2028

icq: 216409213
По умолчанию

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

Цитата:
Сообщение от 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 в 10:40.
dimaSlon вне форума   Ответить с цитированием
Старый 07.06.2018, 10:45   #4
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 153
Репутация: 10
По умолчанию

Мой клас 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, 11:25   #5
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,034
Репутация: 2028

icq: 216409213
По умолчанию

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

Код:

test.mComponents = children;

У вас же поле приватное и функция для добавления есть в классе...
__________________
Запомните раз и навсегда: помочь != "решите за меня"!
p51x на форуме   Ответить с цитированием
Старый 07.06.2018, 11:30   #6
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 153
Репутация: 10
По умолчанию

Цитата:
Сообщение от 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 в 11:41.
dimaSlon вне форума   Ответить с цитированием
Старый 07.06.2018, 11:34   #7
dimaSlon
Форумчанин
 
Регистрация: 24.06.2017
Сообщений: 153
Репутация: 10
По умолчанию

так можна делать?
Код:

 if (jsonData["classType"] == ClassType::TASK)


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

Код:

 test.setName(jsonData["name"]);

а так можна?

Последний раз редактировалось dimaSlon; 07.06.2018 в 11:42.
dimaSlon вне форума   Ответить с цитированием
Старый 07.06.2018, 11:45   #9
p51x
Профессионал
 
Регистрация: 15.02.2010
Сообщений: 12,034
Репутация: 2028

icq: 216409213
По умолчанию

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

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

Цитата:
Сообщение от 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 в 12:16.
dimaSlon вне форума   Ответить с цитированием
Ответ

Опции темы

Ваши права в разделе
Вы не можете создавать новые темы
Вы не можете отвечать в темах
Вы не можете прикреплять вложения
Вы не можете редактировать свои сообщения

BB коды Вкл.
Смайлы Вкл.
[IMG] код Вкл.
HTML код Выкл.

Быстрый переход

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


11:32.


Powered by vBulletin® Version 3.8.8 Beta 2
Copyright ©2000 - 2018, Jelsoft Enterprises Ltd.

RusProfile.ru


Справочник российских юридических лиц и организаций.
Проекты отопления, пеллетные котлы, бойлеры, радиаторы
интернет магазин respective.ru