В отдельном заголовочном файле описываю класс сцены
scene.h#include "mainwindow.h"
#ifndef SCENE_H
#define SCENE_H
class Scene1: public QGraphicsScene{
Q_OBJECT
public:
Scene1(qreal x, qreal y, qreal width, qreal height, b2World *world);
public slots: void advance(){
};
private:
b2World* world;
};
#endif // SCENE_H
Подключаю в
mainwindow.h#ifndef MAINWINDOW_H
#define MAINWINDOW_H
#include <QMainWindow>
...
...
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
~MainWindow();
private:
Ui::MainWindow *ui;
Scene1* scene;
QTimer* frametimer;
b2World* world;
};
#endif // MAINWINDOW_H
Ошибка возникает при добавлении следующей строчки в
mainwindow.cpp scene = new Scene1 (0,0,8,6,world);
(пишу ее в конструкторе)без нее все работает
Сама ошибкаdebug/mainwindow.o: In function `ZN10MainWindowC2EP7QWidget':
E:\project\simple\test\build-qqq-Desktop_Qt_5_10_0_MinGW_32bit-
Debug/../qqq/mainwindow.cpp:22: undefined reference to
`Scene1::Scene1(double, double, double, double, b2World*)'
collect2.exe: error: ld returned 1 exit status
"ОЧИСТИТЬ"-"qmake"-"собрать все" я пробовал, эффект нулевой. в чем может быть проблема?
PS screenshot подсветки кода когда пишу название моего пользовательского класса в mainwindow.cpp, не могу продвинуться дальше не создав его объект(
проект.proQT += core gui
greaterThan(QT_MAJOR_VERSION, 4): QT += widgets
TARGET = qqq
TEMPLATE = app
DEFINES += QT_DEPRECATED_WARNINGS
SOURCES += \
main.cpp \
mainwindow.cpp\
scene.h
HEADERS += \
mainwindow.h \
Box2D/Box2D.h \
scene.h
FORMS += \
mainwindow.ui
CONFIG += mobility
MOBILITY =
win32: LIBS += -L$$PWD/./ -lBox2D
INCLUDEPATH += $$PWD/.
DEPENDPATH += $$PWD/.
win32:!win32-g++: PRE_TARGETDEPS += $$PWD/./Box2D.lib
else:win32-g++: PRE_TARGETDEPS += $$PWD/./libBox2D.a
У вас в .pro
-файле допущена опечатка:
SOURCES += \
main.cpp \
mainwindow.cpp\
scene.h
^^^^^^^
Замените scene.h
на scene.cpp
в секции SOURCES
.
А на данный момент ваш файл scene.cpp
не участвует в компиляции, поэтому линковщик и не видит реализаций функций.
UPD:
Если вы сознательно не создаёте файл scene.cpp
, тогда реализация объявленного вами конструктора класса Scene1
(как впрочем и других методов) должна быть добавлена в scene.h
:
class Scene1 : public QGraphicsScene
{
...
Scene1(qreal x, qreal y, qreal width, qreal height, b2World *world) :
QGraphicsScene(x, y, width, height),
world(world)
{ }
...
};
И в любом случае -- удалите упоминание scene.h
из секции SOURCES
в .pro
-файле.
как минимум, в хедере mainwindow нужно сделать предварительное обьявление класса
сlass Scene1;
а в файл реализации
#include "scene1.h"
засунул определение класса в данном виде обратно в
mainwindow.Hсlass Scene1: public QGraphicsScene{
Q_OBJECT
public:
Scene1(qreal x, qreal y, qreal width, qreal height, b2World *world);
public slots: void advance();
private:
b2World* world;
};
в конце mainwindow.cpp определил класс,входные значения(вызовы функции коэфицента умножения), и определил виртуальную функцию таким образом
mainwindow.cpp.....
MainWindow::~MainWindow()
{
delete ui;
}
Scene1::Scene1(qreal x, qreal y, qreal width, qreal height, b2World *world)
:QGraphicsScene (fromB2(x),fromB2(y),fromB2(width),fromB2(height))
{
this->world=world;
}
void Scene1::advance(){
}
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Всем приветЕсть блок меню, которое выезжает, блок лежит непосредственно в body
В общем, есть фильтр статей по годам, выглядит он следующим образом: