Название: Работа 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 |