Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
3 / 2 / 1
Регистрация: 14.08.2018
Сообщений: 50
1

Вылет приложения при вызове статической функции/переменной из библиотеки

24.12.2019, 19:59. Показов 534. Ответов 2
Метки c++, qt, sfml (Все метки)

Создал библиотеку в ней есть статический класс при вызове которого из приложения получаю аварийное завершение программы, даже debugger не успевает запуститься, в чем причина понять так и не смог.

Компилятор MinGW
SFML 2.5.1

Библиотека
dtime.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
DE_BEGIN_NAMESPACE
 
using namespace sf;
 
class DE_EXPORT DTime
{
    static Clock m_tClock;
    static float m_fDivider;
 
public:
    static float deltaTime;
 
    static float getDivider();
    static void setDivider(float divider = 800.f);
 
    static void updateDeltaTime();
};
 
DE_END_NAMESPACE
dtime.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
DE_BEGIN_NAMESPACE
 
Clock DTime::m_tClock;
float DTime::deltaTime = 0.f;
float DTime::m_fDivider = 800.f;
 
float DTime::getDivider()
{
    return m_fDivider;
}
 
void DTime::setDivider(float divider)
{
    m_fDivider = divider;
}
 
void DTime::updateDeltaTime()
{
    deltaTime = m_tClock.getElapsedTime().asMicroseconds();
    m_tClock.restart();
    deltaTime = deltaTime / m_fDivider;
}
 
DE_END_NAMESPACE
window.h
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
#include <QWidget>
#include <QResizeEvent>
#include <SFML/Graphics.hpp>
#include <QTimer>
 
class SFMLCanvas : public QWidget, public sf::RenderWindow
{
public:
    explicit SFMLCanvas(QWidget *parent, const QPoint& Position, const QSize& Size, int FrameTime = 0);
    virtual void showEvent(QShowEvent*) override;
    virtual QPaintEngine* paintEngine() const override;
    virtual void paintEvent(QPaintEvent*) override;
    virtual ~SFMLCanvas() override;
    virtual void OnInit();
    virtual void OnUpdate();
 
protected:
    void resizeEvent(QResizeEvent *event) override;
    Clock clock;
    View view;
private:
    QTimer myTimer;
    bool myInitialized;
 
 
};
Приложение
window.cpp
C++ (Qt)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
#include "window.h"
 
#ifdef Q_WS_X11
#include <Qt/qx11info_x11.h>
#include <X11/Xlib.h>
#endif
#include <iostream>
 
#include <QDebug>
 
SFMLCanvas::SFMLCanvas(QWidget* Parent, const QPoint& Position, const QSize& Size, int FrameTime)
    : QWidget(Parent),
      myInitialized (false)
{
    setAttribute(Qt::WA_PaintOnScreen);
    setAttribute(Qt::WA_OpaquePaintEvent);
    setAttribute(Qt::WA_NoSystemBackground);
    setFocusPolicy(Qt::StrongFocus);
    // Setup the widget geometry
    move(Position);
    resize(Size);
 
    // Setup the timer
    myTimer.setInterval(FrameTime);
}
 
void SFMLCanvas::showEvent(QShowEvent*)
{
    if (!myInitialized)
    {
        #ifdef Q_WS_X11
          XFlush(QX11Info::display());
        #endif
 
        RenderWindow::create(reinterpret_cast<WindowHandle>(winId()));
        RenderWindow::setView(view);
 
        OnInit();
        connect(&myTimer, SIGNAL(timeout()), this, SLOT(repaint()));
        myTimer.start();
        myInitialized = true;
    }
}
 
QPaintEngine* SFMLCanvas::paintEngine() const
{
    return nullptr;
}
 
void SFMLCanvas::paintEvent(QPaintEvent*)
{
    // Let the derived class do its specific stuff
    OnUpdate();
    // Display on screen
    RenderWindow::display();
}
 
SFMLCanvas::~SFMLCanvas()
{
 
}
 
void SFMLCanvas::OnInit() {}
void SFMLCanvas::OnUpdate() 
{
    de::DTime::updateDeltaTime(); // при вызове вылет :(
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
24.12.2019, 19:59
Ответы с готовыми решениями:

Функция внутри статической библиотеки не возвращает нужного значения при вызове из основного проекта
Структура проекта - Статическая библиотека(создана и подключена правильно), в ней 1 .h и .cpp...

Объявление статической переменной и статической функции в классе
Добрый вечер, столкнулся с проблемой и не могу решить. Есть класс SavingsAccount и в нем объявлена...

Ошибка при вызове функции из другой библиотеки
Добрый день! У меня есть библиотека с функциями написанными на С. При попытке использования одной...

Создание переменной при вызове функции
Хочу создать переменную при вызове функции для укорачивания кода, например вместо такого: ...

2
4601 / 2455 / 1018
Регистрация: 07.02.2019
Сообщений: 6,415
24.12.2019, 20:29 2
Цитата Сообщение от Limaaron Посмотреть сообщение
static Clock m_tClock;
Не надо так, лучше сделай свой класс по паттерну синглтон
1
3 / 2 / 1
Регистрация: 14.08.2018
Сообщений: 50
24.12.2019, 20:37  [ТС] 3
Спасибо что напомнил, я уже и забыл о существовании этого паттерна
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
24.12.2019, 20:37

Кошелёк Bitcoin. Ошибка при вызове функции из библиотеки blockchain info
Я пытаюсь разобраться с blockchain API на github ...

Падение приложения при вызове функции из обработчика
Я слушаю Ком порт вот так mySerialPort.DataReceived += new...

Сделать увеличение статической переменной приложения, не зависимо от страниц
здравствуйте=) подскажите как можно сделать увеличение статической переменной приложения, не...

Ошибка при подключение Статической библиотеки sfeMovie
Здравствуйте Возникает такая проблема, если sfeMovie компилировать в режиме static то вылезают...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.