Russian Qt Forum

Qt => Установка, сборка, отладка, тестирование => Тема начата: lcs-perm от Сентябрь 03, 2013, 06:22



Название: MOC и директива #define
Отправлено: lcs-perm от Сентябрь 03, 2013, 06:22
Добрый день, коллеги.
В процессе использования Qt 4.6 набрел на такой, необъяснимый для меня, факт.
Имеется два варианта исходного кода одной и той же программы (которая ничего не делает).
Первый вариант - без директивы #define. Компилируется успешно.
main.h
Код:
#include <QCoreApplication>
#include <QObject>

#define test_begin class Probe : public QObject {
#define test_end };

class Probe : public QObject {
//test_begin
  Q_OBJECT
//test_end
};

#endif // MAIN_H
main.cpp
Код:
#include "main.h"

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  Probe* p = new Probe();
  return a.exec();
}
Второй вариант - с директивой #define. Линкер выдает ошибку undefined reference to `vtable for Probe'. При этом формируемый moc-файл имеет нулевой размер.
main.h
Код:
#include <QCoreApplication>
#include <QObject>

#define test_begin class Probe : public QObject {
#define test_end };

//class Probe : public QObject {
test_begin
  Q_OBJECT
test_end
//};

#endif // MAIN_H
main.cpp
Код:
#include "main.h"

int main(int argc, char *argv[])
{
  QCoreApplication a(argc, argv);
  Probe* p = new Probe();
  return a.exec();
}
Скажу сразу: cpp-файл в обоих вариантах абсолютно одинаковый, разница только в h-файле.

Отсюда вопрос - это я чего то не знаю или ошибка Qt-шного MOC-компилятора?


Название: Re: MOC и директива #define
Отправлено: Serr500 от Сентябрь 03, 2013, 08:14
http://qt-project.org/forums/viewthread/7996 (http://qt-project.org/forums/viewthread/7996)
Если кратко, то moc не разворачивает #define.


Название: Re: MOC и директива #define
Отправлено: lcs-perm от Сентябрь 03, 2013, 09:54
Если кратко, то moc не разворачивает #define.
Ну на нет и суда нет.
Спасибо.