Автор: alsav22 (22.04.2012 в 13:27)
Если сделать так:
файл mainwindow.h:
#include <QtGui>
#include <QtCore>
#include <QObject>
class MainWindow : public QMainWindow
{
Q_OBJECT
public:
explicit MainWindow(QWidget *parent = 0);
}; |
файл main.cpp:
#include "mainwindow.h"
int main(int argc, char **argv)
{
QApplication app(argc, argv);
MainWindow w;
w.show();
return app.exec();
} |
файл mainwindow.cpp:
#include "mainwindow.h"
MainWindow::MainWindow(QWidget *parent) :
QMainWindow(parent)
{
QLabel* label=new QLabel(this);
label->setText("Hello World!");
label->setAlignment(Qt::AlignCenter);
setCentralWidget(label);
} |
то при построении:
1>------ Построение начато: проект: Qt5, Конфигурация: Debug Win32 ------
1> main.cpp(0): Note: No relevant classes found. No output generated.
1> main.cpp
1> Создание кода...
1> Компиляция...
1> mainwindow.cpp
1> Создание кода...
1> LINK : не найден или не выполнена сборка D:\MY C++Projects\Qt5\Debug\Qt5.exe при последней инкрементной компоновке; выполняется полная компоновка
1>mainwindow.obj : error LNK2001: неразрешенный внешний символ ""public: virtual struct QMetaObject const * __thiscall MainWindow::metaObject(void)const " (?metaObject@MainWindow@@UBEPBUQMetaObject@@XZ)"
1>mainwindow.obj : error LNK2001: неразрешенный внешний символ ""public: virtual void * __thiscall MainWindow::qt_metacast(char const *)" (?qt_metacast@MainWindow@@UAEPAXPBD@Z)"
1>mainwindow.obj : error LNK2001: неразрешенный внешний символ ""public: virtual int __thiscall MainWindow::qt_metacall(enum QMetaObject::Call,int,void * *)" (?qt_metacall@MainWindow@@UAEHW4Call@QMetaObject@@HPAPAX@Z)"
1>D:\MY C++Projects\Qt5\Debug\Qt5.exe : fatal error LNK1120: 3 неразрешенных внешних элементов
========== Построение: успешно: 0, с ошибками: 1, без изменений: 0, пропущено: 0 ========== |
Если убрать Q_OBJECT, то всё нормально. То же самое выдаёт и в случае, если весь код поместить в один файл main.cpp, но это решается написанием в конце кода строки: #include "main.moc" . При трёх файлах это не помогает.
>Попробуйте для начала просто прописать строки
>
>для каждого cpp-файла ...
Как это должно выглядеть? Две строки:
-o main.moc main.cpp
-o main.moc mainwindow.cpp |
? Или как-то по другому?