Intruder
Intruder31 мая 2019 г. 3:31

Как вернуть NULL или что-то подобное из фнукции, которая возвращает собственный тип объекта

Добрый день, уважаемые товарищи!

Так как я только начинаю изучать Qt, у меня появляется много, может быть глупых вопросов. И вот очередной из них. У меня есть класс Harness, в котором есть два коструктора, один умолчательный, во второй я передаю параметры создаваемого объекта:
файл Harness.h

namespace ns_harness {

class WIRINGDATALIBRARYSHARED_EXPORT Harness
{
public:
    explicit Harness();
    explicit Harness(const HarnessIdent &h_Ident,
            const HarnessInfo &h_Info);
....

файл описания Harness.cpp

Harness::Harness()
{
    this->m_harnessInfoObj = harnessInfoObj();
    this->m_harnessIdentObj = harnessIdentObj();

}

Harness::Harness(const HarnessIdent &h_Ident, const HarnessInfo &h_Info)
{
    this->m_harnessIdentObj = h_Ident;
    this->m_harnessInfoObj = h_Info;
}
....

В другом файле я создаю функцию, которая должна разобрать XML файл и записать его в объект. Внутри функции я делаю проверку, открыт файл или нет и если нет, то хочу вернуть пустое значение. Вот как я это хочу сделать:

Harness getHarnessFromXML(const QString& pathfile, const QString& namefile)const;

Harness Wiringdatalibrary::getHarnessFromXML(const QString &pathfile, const QString &namefile) const
{
    /* Объявление объекта file */
    QFile file(namefile);
    QDir currentDir;
    currentDir.setCurrent(pathfile);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        return nullptr;
    };
}

И получаю вот такую ошибку:

wiringdatalibrary.cpp:124:16: error: no viable conversion from returned value of type 'nullptr_t' to function return type 'ns_harness::Harness'
harness.h:22:38: note: candidate constructor (the implicit copy constructor) not viable: no known conversion from 'nullptr_t' to 'const ns_harness::Harness &' for 1st argument
harness.h:22:38: note: candidate constructor (the implicit move constructor) not viable: no known conversion from 'nullptr_t' to 'ns_harness::Harness &&' for 1st argument

Что я делаю не так? В C# в этом плане было все гораздо проще.

Рекомендуем хостинг TIMEWEB
Рекомендуем хостинг TIMEWEB
Стабильный хостинг, на котором располагается социальная сеть EVILEG. Для проектов на Django рекомендуем VDS хостинг.

Вам это нравится? Поделитесь в социальных сетях!

1
Evgenii Legotckoi
  • 31 мая 2019 г. 3:43
  • Ответ был помечен как решение.

Добрый день!

Вам нужно переписать сигнатуру метода, чтобы он возвращал именно указатель на объект.

Это должно выглядеть так

Harness* getHarnessFromXML(const QString& pathfile, const QString& namefile)const;

Harness* Wiringdatalibrary::getHarnessFromXML(const QString &pathfile, const QString &namefile) const
{
    /* Объявление объекта file */
    QFile file(namefile);
    QDir currentDir;
    currentDir.setCurrent(pathfile);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        return nullptr;
    };
}

При этом сам объект должен создаваться через операто new

Harness* getHarnessFromXML(const QString& pathfile, const QString& namefile)const;

Harness* Wiringdatalibrary::getHarnessFromXML(const QString &pathfile, const QString &namefile) const
{
    /* Объявление объекта file */
    QFile file(namefile);
    QDir currentDir;
    currentDir.setCurrent(pathfile);
    if(!file.open(QIODevice::ReadOnly | QIODevice::Text)){
        return nullptr;
    };

    Harness* harness = new Harness();
    return harness;
}

    Комментарии

    Только авторизованные пользователи могут публиковать комментарии.
    Пожалуйста, авторизуйтесь или зарегистрируйтесь
    AD

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:50баллов,
    • Очки рейтинга-4
    m
    • molni99
    • 26 октября 2024 г. 11:37

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:80баллов,
    • Очки рейтинга4
    m
    • molni99
    • 26 октября 2024 г. 11:29

    C++ - Тест 004. Указатели, Массивы и Циклы

    • Результат:20баллов,
    • Очки рейтинга-10
    Последние комментарии
    i
    innorwall15 ноября 2024 г. 13:27
    Релиз утилиты развертывания С++/Qt и QML приложений CQtDeployer v1.4.0 (Binary Box) optionally substituted alkoxy, optionally substituted alkenyloxy, optionally substituted alkynyloxy, optionally substituted aryloxy, OCH, OC H, OC H, OC H, OC H, OC H, OC H, O C CH, OCH CH OH, O…
    i
    innorwall15 ноября 2024 г. 8:26
    Qt/C++ - Урок 031. QCustomPlot - строим график по времени buy generic priligy We can just chat, and we will not lose too much time anyway
    i
    innorwall15 ноября 2024 г. 6:03
    Qt/C++ - Урок 060. Настройка внешнего вида приложения в рантайме I didnt have an issue work colors priligy dapoxetine 60mg revia cost uk August 3, 2022 Reply
    i
    innorwall14 ноября 2024 г. 22:42
    Как Копировать Файлы в Linux If only females relatives with DZ offspring were considered these percentages were 23 order priligy online uk
    Сейчас обсуждают на форуме
    i
    innorwall14 ноября 2024 г. 14:39
    добавить qlineseries в функции priligy amazon canada 93 GREB1 protein GREB1 AB011147 6
    i
    innorwall11 ноября 2024 г. 21:55
    Всё ещё разбираюсь с кешем. priligy walgreens levitra dulcolax carbs The third ring was found to be made up of ultra relativistic electrons, which are also present in both the outer and inner rings
    9
    9Anonim25 октября 2024 г. 19:10
    Машина тьюринга // Начальное состояние 0 0, ,<,1 // Переход в состояние 1 при пустом символе 0,0,>,0 // Остаемся в состоянии 0, двигаясь вправо при встрече 0 0,1,>…
    ИМ
    Игорь Максимов3 октября 2024 г. 14:05
    Реализация навигации по разделам Спасибо Евгений!

    Следите за нами в социальных сетях