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