Название: undefined reference to ‘vtable - неужели нет решения для main.cpp? Отправлено: yarick от Январь 19, 2013, 21:02 Если класс с макросом Q_Object объявить перед main.cpp - то компилятор выдаст ошибку "undefined reference to ‘vtable ...".
Это происходит потому, что moc-препроцессор не обрабатывает cpp а обрабатывает только h. Соответственно проблема решается грамтоным размещением объявления класса с макросом в h-файле, а тела класса - в cpp. Все мои классы я так и делаю. Однако я создаю собственную библиотеку примеров кода, на которой показываю использование тех или иных языковых элементов и классов. И для неё крайне нежелательно создавать класс в отдельном файле - пропадает наглядность, и вообще не удобно. Я пытался обмануть qmake, включая HEADERS += main.cpp - но это не работает. По-сути класс мне нужен только для того чтобы в него запихнуть слоты и показать примеры работы сигналов. Вижу следующие пути решения проблемы:
Название: Re: undefined reference to ‘vtable - неужели нет решения для main.cpp? Отправлено: kambala от Январь 19, 2013, 21:13 в конец main.cpp допиши #include "main.moc"
Название: Re: undefined reference to ‘vtable - неужели нет решения для main.cpp? Отправлено: yarick от Январь 20, 2013, 07:41 в конец main.cpp допиши #include "main.moc" Спасибо, это действительно работает!Получается что препроцессор создаёт moc-файлы для cpp но не включает их? Название: Re: undefined reference to ‘vtable - неужели нет решения для main.cpp? Отправлено: Alex Custov от Январь 21, 2013, 17:03 в конец main.cpp допиши #include "main.moc" Спасибо, это действительно работает!Получается что препроцессор создаёт moc-файлы для cpp но не включает их? Это указание для qmake, который во время парсинга .pro файла и переменной SOURCES, проверяет наличие такой строки в .cpp файлах, и создаёт нужные .moc файлы. Если данной директивы нет, то moc файлы создаются как обычно и только там, где нужно. |