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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Ошибки при подключении X11/Xlib и X11/Xutil  (Прочитано 5007 раз)
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 подключить то, проект собирается.
« Последнее редактирование: Апрель 26, 2010, 14:51 от DpoHro » Записан
crossly
Гость
« Ответ #1 : Апрель 26, 2010, 15:04 »

вынеси код работы с Х в отдельный файл.... а еще лучше в отдельный неймспейс
Записан
Rcus
Гость
« Ответ #2 : Апрель 26, 2010, 15:27 »

Ну так все нормально, int есть. Надо смотреть не исходники, а результат работы препроцессора. С учетом макроса #define Bool int в Xlib.h все сходится.
Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #3 : Апрель 26, 2010, 18:19 »

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

В KDE был даже когда-то файл, исправляющий использование некоторых символов, назывался он fixx11h.h
Записан
DpoHro
Гость
« Ответ #4 : Апрель 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-и
« Последнее редактирование: Апрель 27, 2010, 07:57 от DpoHro » Записан
Alex Custov
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 2063


Просмотр профиля
« Ответ #5 : Апрель 28, 2010, 01:18 »

проблема в том, что "Bool" - это define в X API. Т.е. QVariant::Bool после процедуры препроцессинга превращаяется в QVariant::int. Попробуй включить fixx11h.h после X-овых заголовков.
Записан
DpoHro
Гость
« Ответ #6 : Июнь 01, 2010, 08:06 »

Спасибо! fixxx действительно решил проблему!
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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