Russian Qt Forum

Программирование => С/C++ => Тема начата: WILY от Август 04, 2015, 15:26



Название: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: WILY от Август 04, 2015, 15:26
Добрый день, пытаюсь перенести работающий проект на новую платформ, но столкнулся с рядом проблем.
Честно признаюсь писал код не я (пришел на работу мне сказали, на держи, и делай), а кто писал уже никто не помнит, и вообще не факто что кто-то писал.
Есть джаббер сервер, и библиотечка QXMPP вот в ней, при сборке он выводит ошибку.

E:\****\QXMPP\QXmppInvokable.cpp:60: ошибка: cannot call member function 'void* QMetaType::construct(void*, const void*) const' without object

void *result = QMetaType::construct(resultType, 0);

Все это ссылается на вот эту строку
Код:
 void *result = QMetaType::construct(resultType, 0);
может кто-нибудь уже сталкивался с данной проблемой при переходе?
Всем черепашек
(http://www.playcast.ru/uploads/2015/05/23/13714267.jpg)


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: Пантер от Август 04, 2015, 15:29
Ты бы версию QXMPP привел для начала.


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: Old от Август 04, 2015, 15:32
Все это ссылается на вот эту строку
Код:
 void *result = QMetaType::construct(resultType, 0);
А так?
Код
C++ (Qt)
void *result = QMetaType::construct(resultType, 0, 0);


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: __Heaven__ от Август 04, 2015, 15:42
Вас просят не вызывать методы класса без экземпляра класса.
Как написал Old, используйте статические методы.
Из документации:
Код
C++ (Qt)
void * QMetaType::construct(void * where, const void * copy = 0) const;
void * QMetaType::construct(int type, void * where, const void * copy); // static


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: WILY от Август 04, 2015, 15:43
Все это ссылается на вот эту строку
Код:
 void *result = QMetaType::construct(resultType, 0);
А так?
Код
C++ (Qt)
void *result = QMetaType::construct(resultType, 0, 0);


Гранд мерси! Снимаю шляпу, ошибка пропала)



А может кто-нибудь знает тогда и следующую ошибку?

E:\*****\QXMPP\QXmppInvokable.cpp:113: ошибка: 'class QMetaMethod' has no member named 'signature'
         QByteArray signature = metaObject()->method(idx).signature();

Ссылается на следующую строку

Код:
QByteArray signature = metaObject()->method(idx).signature();

А по поводу версии, там в шапке вот что

 * This file is a part of QXmpp library.
 *
 * This library is free software; you can redistribute it and/or
 * modify it under the terms of the GNU Lesser General Public
 * License as published by the Free Software Foundation; either
 * version 2.1 of the License, or (at your option) any later version.


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: Old от Август 04, 2015, 15:49
Код
C++ (Qt)
QByteArray signature = metaObject()->method(idx).methodSignature();


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: WILY от Август 04, 2015, 16:24
Хорошей кармы тебе человек!
Ура, заработало! .... Почти) вылезли новые ошибки, пойду новые темы создавать.

Вам поклон глубочайший)


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: WILY от Август 04, 2015, 16:34
а нет, проблема все таки есть
вот тут
Код
C++ (Qt)
   quint8 reserved, protocol;
   quint16 rawPort;
   stream >> reserved;
   stream >> protocol;
   stream >> rawPort;

ошибка

E:\***********\QXMPP\QXmppStun.cpp:102: ошибка: no match for 'operator>>' (operand types are 'QDataStream' and 'quint8 {aka unsigned char}')
     stream >> reserved;
            ^

Почитал документацию, вроде все отлично
(http://i.gyazo.com/11b58b4ca85f4aa9897ad6e7b78fa238.png)

Может кто-то встречался?


Название: Re: [ПРОБЛЕМА] переход на 5.5 QXMPP
Отправлено: Fat-Zer от Август 04, 2015, 16:53
E:\***********\QXMPP\QXmppStun.cpp:102: ошибка: no match for 'operator>>' (operand types are 'QDataStream' and 'quint8 {aka unsigned char}')
     stream >> reserved;
Вангую, что QDataStream не включён...

Вообще говоря, QXMPP уже портирован на пятёрку... так что апстриме в помощь: https://github.com/qxmpp-project/qxmpp/