crossplatform.ru

Здравствуйте, гость ( Вход | Регистрация )

2 страниц V  < 1 2  
Ответить в данную темуНачать новую тему
> QHash
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2010, 21:38
Сообщение #11


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Цитата(k0p4 @ 17.2.2010, 0:33) *
переменные name, dateOfBirth, должны быть где-то определены?
чтобы не иметь проблем в конструкторе при инициализации внутренних переменных класса, входными аргументами конструктора. Лучше оставить имена внутренних переменных как есть, а исправить имена переменных в inline-функциях
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
k0p4
  опции профиля:
сообщение 16.2.2010, 21:46
Сообщение #12


Студент
*

Группа: Участник
Сообщений: 20
Регистрация: 18.10.2009
Пользователь №: 1160

Спасибо сказали: 0 раз(а)




Репутация:   0  


т.е. код должен выглядеть так?
Раскрывающийся текст
public:     
     Employee() {}
     Employee(const QString &name, const QDate &dateOfBirth);

     QString myName;
     QDate myDateOfBirth;
};

inline bool operator==(const Employee &e1, const Employee &e2)
{
     return e1.name() == e2.name() //  'name' : is not a member of 'Employee'
            && e1.dateOfBirth() == e2.dateOfBirth();
}

inline uint qHash(const Employee &key)
{
     return qHash(key.myName()) ^ key.myDateOfBirth().day();
}


Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.2.2010, 21:52
Сообщение #13


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Раскрывающийся текст
public:     
     Employee() {}
     Employee(const QString &name, const QDate &dateOfBirth);

     QString myName;
     QDate myDateOfBirth;
};

inline bool operator==(const Employee &e1, const Employee &e2)
{
    // У тебя в классе Employee разве есть метод name()? Вроже нет... А ты пытаешься его вызвать, о чем тебе компилятор и говорит
     return e1.name() == e2.name() //  'name' : is not a member of 'Employee'
    // также у тебя нет метода dateOfBirth()...
            && e1.dateOfBirth() == e2.dateOfBirth();
}

inline uint qHash(const Employee &key)
{
    // У тебя нет метода myName() и myDateOfBirth(), есть такие переменные.
     return qHash(key.myName()) ^ key.myDateOfBirth().day();
}


Пока ты не выучишь C++ писать на нем не получиться. ;)
http://www.proklondike.com/books/cpp/straustrup_cpp.html
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
Litkevich Yuriy
  опции профиля:
сообщение 16.2.2010, 22:00
Сообщение #14


разработчик РЭА
*******

Группа: Сомодератор
Сообщений: 9669
Регистрация: 9.1.2008
Из: Тюмень
Пользователь №: 64

Спасибо сказали: 807 раз(а)




Репутация:   94  


Чёт я на функции вообще внимания не обратил

тогда в изначальный код можно было бы и самим тролям добавить пару открытых функций:
QString name(){return myName;}
QDate dateOfBirth(){return myDateOfBirth;}
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение
BRE
  опции профиля:
сообщение 16.2.2010, 22:02
Сообщение #15


Профессионал
*****

Группа: Участник
Сообщений: 1112
Регистрация: 6.3.2009
Из: Ростов-на-Дону
Пользователь №: 591

Спасибо сказали: 264 раз(а)




Репутация:   44  


Цитата(Litkevich Yuriy @ 16.2.2010, 22:00) *
тогда в изначальный код можно было бы и самим тролям добавить пару открытых функций:


Юра, они это подразумевали под ... :)
class Employee
{
public:
     Employee() {}
     Employee(const QString &name, const QDate &dateOfBirth);
     ...

private:
     QString myName;
     QDate myDateOfBirth;
};
Перейти в начало страницы
 
Быстрая цитата+Цитировать сообщение

2 страниц V  < 1 2
Быстрый ответОтветить в данную темуНачать новую тему
Теги
Нет тегов для показа


2 чел. читают эту тему (гостей: 2, скрытых пользователей: 0)
Пользователей: 0




RSS Текстовая версия Сейчас: 26.11.2024, 2:15