Здравствуйте. Есть проблемка. Не могу засунуть собственный клас в QHash, вот такой код :
#ifndef EMPLOYEE_H
#define EMPLOYEE_H
#include <QtGui>
#include <QString>
#include <QHash>
class Employee
{
public:
Employee() {}
Employee(const QString &name, const QDate &dateOfBirth);
private:
QString myName;
QDate myDateOfBirth;
};
inline bool operator==(const Employee &e1, const Employee &e2)
{
return e1.name() == e2.name()
&& e1.dateOfBirth() == e2.dateOfBirth();
}
inline uint qHash(const Employee &key)
{
return qHash(key.name()) ^ key.dateOfBirth().day();
}
#endif // EMPLOYEE_H
#include "hash.h"
#include <QtGui>
#include <QHash>
#include <QString>
Employee::Employee(const QString &name, const QDate &dateOfBirth)
{
QHash<QString, Employee *> hash;
}
Че компилятор то выдает? Какие ошибки?
поправил так :
private:
QString Name;
QDate DateOfBirth;
кстати, надо было переменные в конструкторе определять не в конструкторе?, т.е
QString name;
QString dateOfBirth;
Employee() {}
Employee(const QString &name, const QDate &dateOfBirth);
Employee(const QString &name, const QDate &dateOfBirth);
, переменные name, dateOfBirth, должны быть где-то определены?т.е. код должен выглядеть так?
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();
}
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();
}
Чёт я на функции вообще внимания не обратил
тогда в изначальный код можно было бы и самим тролям добавить пару открытых функций:
QString name(){return myName;}
QDate dateOfBirth(){return myDateOfBirth;}
class Employee
{
public:
Employee() {}
Employee(const QString &name, const QDate &dateOfBirth);
...
private:
QString myName;
QDate myDateOfBirth;
};
Форум Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)