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

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

Страниц: [1]   Вниз
  Печать  
Автор Тема: Работа c QHesh, использование своего класса в хэше  (Прочитано 6424 раз)
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));
}

Выдает оч много ошибок и не компилируется не указывает что именно в листинге не так.
Записан
kambala
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4747



Просмотр профиля WWW
« Ответ #1 : Июль 18, 2013, 15:16 »

при тонне ошибок обычно самая первая в списке будет что-то означать, остальные подтягиваются просто «по инерции». проблем с классом вроде нету.
Записан

Изучением C++ вымощена дорога в Qt.

UTF-8 has been around since 1993 and Unicode 2.0 since 1996; if you have created any 8-bit character content since 1996 in anything other than UTF-8, then I hate you. © Matt Gallagher
VPS
Гость
« Ответ #2 : Июль 18, 2013, 16:18 »

У Вас строка "#include <QHash>" есть в объявлении класса?
Записан
gil9red
Administrator
Джедай : наставник для всех
*****
Offline Offline

Сообщений: 1805



Просмотр профиля WWW
« Ответ #3 : Июль 18, 2013, 18:24 »

Скопировали бы сюда хотя бы те ошибки Улыбающийся
Записан

romanster
Гость
« Ответ #4 : Июль 21, 2013, 16:56 »


Объявляю как QHash<QString,HashClass> HashTab;
Далее пишу в табличку HashTab["0"]= HashClass("123","8909");
Пытаюсь получить данные по индексу QMessageBox::information(this, tr("inf"), HashTab.value("0").val1());
На этапе получения данных ошибки.
« Последнее редактирование: Июль 21, 2013, 17:06 от romanster » Записан
romanster
Гость
« Ответ #5 : Июль 21, 2013, 17:00 »

Ошибки в таком духе :
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #6 : Июль 21, 2013, 17:21 »

Определите конструктор по умолчанию (это который без параметров) для вашего класса HashClass.
Записан
romanster
Гость
« Ответ #7 : Июль 22, 2013, 13:03 »

Да спсб определил и функции сделал думаю вот когда оператор << сериализую то приватные переменные не работают в нем а надо бы:
inline QDataStream &operator<<(QDataStream &in, const HashClass &m)
{
    in << m.vv;
    in<< m.vv2;
    return in;
}
« Последнее редактирование: Июль 22, 2013, 13:06 от romanster » Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #8 : Июль 22, 2013, 13:23 »

Так сделайте эти функции friend для вашего класса.
Записан
romanster
Гость
« Ответ #9 : Июль 23, 2013, 05:44 »

Благодарствую вас Old видимо смысл аватары оправдывает владельца. И всем так же спасибо все заработало. Далее попробую разобратся с чилд классами форм если будут сомнения напишу.
Записан
ритт
Гость
« Ответ #10 : Июль 23, 2013, 10:14 »

@Old: тс назвал тебя старой злобной ушастой лягушкой? там кнопочка справа внизу "сообщить модератору" ))
Записан
Old
Джедай : наставник для всех
*******
Offline Offline

Сообщений: 4350



Просмотр профиля
« Ответ #11 : Июль 23, 2013, 10:16 »

@Old: тс назвал тебя старой злобной ушастой лягушкой? там кнопочка справа внизу "сообщить модератору" ))
Смеющийся
Записан
Страниц: [1]   Вверх
  Печать  
 
Перейти в:  


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