Russian Qt Forum

Qt => Общие вопросы => Тема начата: romanster от Июль 18, 2013, 13:38



Название: Работа c QHesh, использование своего класса в хэше
Отправлено: romanster от Июль 18, 2013, 13:38
Здравствуйте элементарщина не получается если можно подскажите пожалуйста. Объявил класс :
class HashClass
{
public:
    HashClass(QString value1, QString value2,  QString value3);

      QString value1() const;
      QString value2() const;
      QString value3() const;

private:
  QString vvalue1, vvalue2, vvalue3;
};

inline bool operator==(const HashClass &a, const HashClass &b)
{
    return (a.value1() == b.value1()) && (a.value2() == b.value2()) && (a.value3() == b.value3());
}

inline uint qHash(const HashClass &key)
{
    return qHash(key.value1()) ^ qHash( key.value2() ) ^ qHash( key.value3() );
}

HashClass::HashClass( QString value1, QString value2, QString value3 ) : vvalue1( value1 ),vvalue2( value2 ),vvalue3( value3 ){}
QString HashClass::value1() const { return vvalue1;}
QString HashClass::value2() const { return vvalue2;}
QString HashClass::value3() const {return vvalue3;}

Для кнопки описал процедурку подконнектил и пытаюсь что то записать в хэш и извлеч от туда:
void window::Generate(){
    QHash<HashClass,int> hash;
    hash[HashClass("1", "2","3")] = 10;


    QString s = "";
    int n = hash.count(HashClass("1", "2","3"));

    QMessageBox::information(this, tr("inf"), s.number(n, 10));
}

Выдает оч много ошибок и не компилируется не указывает что именно в листинге не так.


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: kambala от Июль 18, 2013, 15:16
при тонне ошибок обычно самая первая в списке будет что-то означать, остальные подтягиваются просто «по инерции». проблем с классом вроде нету.


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: VPS от Июль 18, 2013, 16:18
У Вас строка "#include <QHash>" есть в объявлении класса?


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: gil9red от Июль 18, 2013, 18:24
Скопировали бы сюда хотя бы те ошибки :)


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: romanster от Июль 21, 2013, 16:56

Объявляю как QHash<QString,HashClass> HashTab;
Далее пишу в табличку HashTab["0"]= HashClass("123","8909");
Пытаюсь получить данные по индексу QMessageBox::information(this, tr("inf"), HashTab.value("0").val1());
На этапе получения данных ошибки.


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: romanster от Июль 21, 2013, 17:00
Ошибки в таком духе :(http://savepic.org/4067023.jpg)


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: Old от Июль 21, 2013, 17:21
Определите конструктор по умолчанию (это который без параметров) для вашего класса HashClass.


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: romanster от Июль 22, 2013, 13:03
Да спсб определил и функции сделал думаю вот когда оператор << сериализую то приватные переменные не работают в нем а надо бы:
inline QDataStream &operator<<(QDataStream &in, const HashClass &m)
{
    in << m.vv;
    in<< m.vv2;
    return in;
}


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: Old от Июль 22, 2013, 13:23
Так сделайте эти функции friend для вашего класса.


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: romanster от Июль 23, 2013, 05:44
Благодарствую вас Old видимо смысл аватары оправдывает владельца. И всем так же спасибо все заработало. Далее попробую разобратся с чилд классами форм если будут сомнения напишу.


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: ритт от Июль 23, 2013, 10:14
@Old: тс назвал тебя старой злобной ушастой лягушкой? там кнопочка справа внизу "сообщить модератору" ))


Название: Re: Работа c QHesh, использование своего класса в хэше
Отправлено: Old от Июль 23, 2013, 10:16
@Old: тс назвал тебя старой злобной ушастой лягушкой? там кнопочка справа внизу "сообщить модератору" ))
;D