Russian Qt Forum
Сентябрь 23, 2024, 20:16 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: 1 [2] 3   Вниз
  Печать  
Автор Тема: [Решено] Разработка ПО на Qt через тестирование (Test-Driven Development)  (Прочитано 19030 раз)
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #15 : Февраль 12, 2014, 15:03 »

Код
C++ (Qt)
try
{
   double actual = calc.div(arg1, arg2);
}
catch (std::invalid_argument e)
{
   // обрабатываешь исключение
}
Полагаю для флотов проще так
Код
C++ (Qt)
double actual = calc.div(arg1, arg2);
if (actual != actual)
   // обработка ошибки
 
Записан
8Observer8
Гость
« Ответ #16 : Февраль 12, 2014, 16:06 »


Спасибо!

Пытаюсь к проекту (с помощью которого тестирую) подключить класс "Dialog". В этом классе у меня калькулятор реализован.

В файле .pro
Код:
INCLUDEPATH += "../QtCalculator/dialog.h"
INCLUDEPATH += ../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/ui_dialog.h

SOURCES += tst_testguiqtcalculatortest.cpp ../QtCalculator/dialog.cpp

В файле с тестами:
Код:
#include "../QtCalculator/dialog.h"
#include "../build-QtCalculator-Desktop_Qt_5_2_0_MinGW_32bit-Debug/ui_dialog.h"

Создаю экземпляр класса Dialog:
Код:
Dialog dialog;

Выдаёт ошибки:
Цитировать
D:\Documents\Qt\QtExamples\0094_QtCalculator\QtCalculator\dialog.cpp:7: error: undefined reference to `vtable for Dialog'
D:\Documents\Qt\QtExamples\0094_QtCalculator\QtCalculator\dialog.cpp:7: error: undefined reference to `vtable for Dialog'

Я что-то не так делаю. Поскажите.
Записан
8Observer8
Гость
« Ответ #17 : Февраль 12, 2014, 16:13 »

Код
C++ (Qt)
try
{
   double actual = calc.div(arg1, arg2);
}
catch (std::invalid_argument e)
{
   // обрабатываешь исключение
}
Полагаю для флотов проще так
Код
C++ (Qt)
double actual = calc.div(arg1, arg2);
if (actual != actual)
   // обработка ошибки
 


Числа double сравнивают с погрешностью, так как на копьютере они почти всегда неравны. Я с таким вариантом намучился, вроде должны совпадать точь-в-точь, а на практике они на каком-нибудь знаке будут неравны. Даже если привести из int в double.
Записан
8Observer8
Гость
« Ответ #18 : Февраль 12, 2014, 16:22 »

У меня такого же типа ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

И в этой программке:

Код:
#include <QCoreApplication>
#include <QNetworkAccessManager>
#include <QDebug>
#include <QWidget>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}

public slots:
    void replyFinished (QNetworkReply*) {

    }
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    QNetworkAccessManager *manager = new QNetworkAccessManager();
    //QObject::connect(manager, SIGNAL(finished(QNetworkReply*)), &n, SLOT(replyFinished(QNetworkReply*)));

//    QNetworkReply* m_http = manager->get(QNetworkRequest(QUrl("http://qt-project.org")));

//    QString russian = QString::fromUtf8(m_http->readAll());

//    qDebug() << russian;

    return a.exec();
}

//#include "main.moc"

Объясните, пожалуйста!
Записан
Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #19 : Февраль 12, 2014, 16:24 »

Числа double сравнивают с погрешностью, так как на копьютере они почти всегда неравны. Я с таким вариантом намучился, вроде должны совпадать точь-в-точь, а на практике они на каком-нибудь знаке будут неравны. Даже если привести из int в double.
Внимательнее смотрите что с чем сравнивается выше  Улыбающийся
Записан
8Observer8
Гость
« Ответ #20 : Февраль 12, 2014, 16:46 »

Числа double сравнивают с погрешностью, так как на копьютере они почти всегда неравны. Я с таким вариантом намучился, вроде должны совпадать точь-в-точь, а на практике они на каком-нибудь знаке будут неравны. Даже если привести из int в double.
Внимательнее смотрите что с чем сравнивается выше  Улыбающийся

Не понял. Зачем сравнивать actual если они всегда равны?
Записан
8Observer8
Гость
« Ответ #21 : Февраль 12, 2014, 16:59 »

Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #22 : Февраль 12, 2014, 17:06 »

Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}

В pro файл добавили QT += network?
Записан

8Observer8
Гость
« Ответ #23 : Февраль 12, 2014, 17:07 »

Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}

В pro файл добавили QT += network?

Зачем? Улыбающийся
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #24 : Февраль 12, 2014, 17:11 »

Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:
Потому что moc не обрабатывает cpp файлы, а вы этот класс добавили в main.cpp
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #25 : Февраль 12, 2014, 17:14 »

Почему, когда я добавляю макрос Q_OBJECT, то выдаётся ошибка:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:11: error: undefined reference to `vtable for Network'

Код:
#include <QCoreApplication>
#include <QObject>

class Network : public QObject
{
    Q_OBJECT
public:
    Network() {}
};


int main(int argc, char *argv[])
{
    QCoreApplication a(argc, argv);

    Network n;

    return a.exec();
}

В pro файл добавили QT += network?

Зачем? Улыбающийся

Тьфу, не до конца прочитал, думал что при использовании классов модуля QtNetwork ошибка лезет =)
Добавьте в конец main.cpp #include "main.moc"
Только так лучше не делать, а придерживаться правила: для каждого класса свой h и cpp файлы создавать Улыбающийся
« Последнее редактирование: Февраль 12, 2014, 17:17 от gil9red » Записан

Igors
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 11445


Просмотр профиля
« Ответ #26 : Февраль 12, 2014, 17:14 »

Сначала попробую ответить на то что Вас больше волнует (missed vftable). Никакой ошибки не вижу, возможно moc файл не создан, решается очисткой и пересборкой (типа Build All). А вообще как только я вижу что-то типа "NetworkManager", то примерный  ход мысли:

- ну блин, точно сачок. Работать не хочет, щемится в веб, думает там легче проявить способности. И ведь не понимает что чем больше народу - тем хуже. Ладно, жизнь ему покажет какой там мед..

Не понял. Зачем сравнивать actual если они всегда равны?
В том-то и дело что не всегда  Улыбающийся
Записан
8Observer8
Гость
« Ответ #27 : Февраль 12, 2014, 17:18 »

Добавьте в конец main.cpp #include "main.moc"

Добавил, теперь говорит:

Цитировать
D:\Documents\Qt\QtExamples\0082_QNetworkAccessManager\QNetworkAccessManager\main.cpp:38: error: main.moc: No such file or directory
 #include "main.moc"
                    ^
Записан
8Observer8
Гость
« Ответ #28 : Февраль 12, 2014, 17:23 »

А вообще как только я вижу что-то типа "NetworkManager", то примерный  ход мысли:

- ну блин, точно сачок. Работать не хочет, щемится в веб, думает там легче проявить способности. И ведь не понимает что чем больше народу - тем хуже. Ладно, жизнь ему покажет какой там мед..

Мне нужно проработать этот список вопросов, который прислали с будущей работы:

Цитировать
Qt:
1. Деплоймент приложений, написанных с использованием Qt5.2 на Windows, Linux и других платформах.
2. Организация взаимодействия с серверными приложениями: QNetworkAccessManager, QNetworkRequest, QNetworkReply и сопутствующие классы. Поддержка SSL-соединения, деплоймент приложений с использованием SSL.
3. Обработка форматов, используемых для обмена данными в веб-приложениях (QJsonDocument, QDomDocument и сопутствующие классы).
4. Нововведения Qt5 по сравнению с Qt4.
5. Организация многопоточных приложений, механизмы взаимодействия и синхронизации потоков в приложениях на Qt.
6. Принципы работы qmake, moc, makefiles.
7. Разница между событями и сигналами/слотами.
8. Использование GDB для отладки приложений, написанных на Qt.

С++:
Понимание ООП (наследование, инкапсуляция, полиморфизм), виртуальные функции, статический и динамический полиморфизм, паттерны проектирования, структуры данных (сравнение контейнерных классов STL и Qt), практическая значимость нововведений стандарта с++11, причины утечки памяти и способы борьбы с ними.
Записан
Old
Джедай : наставник для всех
*******
Online Online

Сообщений: 4350



Просмотр профиля
« Ответ #29 : Февраль 12, 2014, 17:25 »

Мне нужно проработать этот список вопросов, который прислали с будущей работы:
Не обращайте внимания, это очередные понты... Все нужно знать и везде нужно работать. Подмигивающий
Записан
Страниц: 1 [2] 3   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.191 секунд. Запросов: 23.