Russian Qt Forum
Ноябрь 27, 2024, 06:25 *
Добро пожаловать, Гость. Пожалуйста, войдите или зарегистрируйтесь.
Вам не пришло письмо с кодом активации?

Войти
 
  Начало   Форум  WIKI (Вики)FAQ Помощь Поиск Войти Регистрация  

Страниц: [1]   Вниз
  Печать  
Автор Тема: MOC и директива #define  (Прочитано 2396 раз)
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-компилятора?
Записан
Serr500
Гость
« Ответ #1 : Сентябрь 03, 2013, 08:14 »

http://qt-project.org/forums/viewthread/7996
Если кратко, то moc не разворачивает #define.
Записан
lcs-perm
Гость
« Ответ #2 : Сентябрь 03, 2013, 09:54 »

Если кратко, то moc не разворачивает #define.
Ну на нет и суда нет.
Спасибо.
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


Страница сгенерирована за 0.098 секунд. Запросов: 21.