Russian Qt Forum

Qt => Общие вопросы => Тема начата: DpoHro от Апрель 26, 2010, 14:44



Название: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: DpoHro от Апрель 26, 2010, 14:44
Пытаюсь воспользоваться ф-ми для манипуляции окнами, для чего в своем приложении подключаю

Код:
#ifdef Q_WS_X11 
#include <X11/Xlib.h>
#include <X11/Xutils.h>
#include <stdio.h>
#endif

Если подключать до инклудов Qt то вываливается толпа ошибок.
Если после то всего одна на много где:
expected unqualified-id before 'int'

Но в тех строках куда указывает компилятор об int-е нет и упоминания:

Код:
m_rpcControlServer->registerMethod( "managementMemberScreen", QVariant::Bool, QVariant::String);

Это ф-ции библиотеки xmlrpc, но мне кажется не в них дело.

Есть у кого предположения как решить данную проблему?

Кстати, если в main.cpp подключить то, проект собирается.


Название: Re: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: crossly от Апрель 26, 2010, 15:04
вынеси код работы с Х в отдельный файл.... а еще лучше в отдельный неймспейс


Название: Re: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: Rcus от Апрель 26, 2010, 15:27
Ну так все нормально, int есть. Надо смотреть не исходники, а результат работы препроцессора. С учетом макроса #define Bool int в Xlib.h все сходится.


Название: Re: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: Alex Custov от Апрель 26, 2010, 18:19
Проблема в том, что разработчики X API решили, что они очень умные. Теперь в больших проектах, где используется много библиотек (особенно Qt), можно получить проблемы сборки. Самое простое решение - подключать X заголовки самыми последними. Если подключишь раньше Qt-шных, могут быть проблемы с define-aми Bool, Cursor, и др.

В KDE был даже когда-то файл, исправляющий использование некоторых символов, назывался он fixx11h.h


Название: Re: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: DpoHro от Апрель 27, 2010, 07:55
вынеси код работы с Х в отдельный файл.... а еще лучше в отдельный неймспейс
В отдельный класс выносил, эффект ровно такой же. Про неймспейс... Это как это? Примерчик есть?

Цитировать
Ну так все нормально, int есть. Надо смотреть не исходники, а результат работы препроцессора. С учетом макроса #define Bool int в Xlib.h все сходится.
Я в сети видел какой то способ переопределения чтоли Int-а в контексте данной проблемы... Но для своих нужд как то так и не приспособил, возможно чегото недогоняю ((

Цитировать
Самое простое решение - подключать X заголовки самыми последними. Если подключишь раньше Qt-шных, могут быть проблемы с define-aми Bool, Cursor, и др.
Я после подключаю, вот одна эта ошибка появляется в этом случае, если до, то там такое вываливается .... даж читать не хочется ))

Так и не могу разобраться с проблемой ((
Стало казаться, что проблема только в ф-ции библиотеки xmlrpc.

Вот ее объявление:

Код:
void registerMethod( QString methodName, QVariant::Type returnType, QVariant::Type parameter1Type );
Как видно, об 'int' тут даже ничего и не слышно... Передаю туда исключительно String-и


Название: Re: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: Alex Custov от Апрель 28, 2010, 01:18
проблема в том, что "Bool" - это define в X API. Т.е. QVariant::Bool после процедуры препроцессинга превращаяется в QVariant::int. Попробуй включить fixx11h.h после X-овых заголовков.


Название: Re: Ошибки при подключении X11/Xlib и X11/Xutil
Отправлено: DpoHro от Июнь 01, 2010, 08:06
Спасибо! fixxx действительно решил проблему!