Добрый день, коллеги.
В процессе использования 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-компилятора?