Hi
I have written a class User. Its a simple class which stores some information about user. Here is a code:
user.h
#ifndef USER_H
#define USER_H
#include <QObject>
#include <QString>
#include <QHostAddress>
#include <QDateTime>
#include <QDataStream>
{
Q_OBJECT
public:
User();
User(const User &newUser);
~User();
void setConnectionDateTime
(const QDateTime &newConnectionDateTime
);
void setFirstName
(const QString &newFirstName
);
void setLastName
(const QString &newLastName
);
QString firstName
() const {return userFirstName;
} QString lastName
() const {return userLastName;
} QDateTime connectionDateTime
() const {return userConnectionDateTime;
} quint16 userSize() const;
bool operator==(const User & other) const;
private:
};
#endif // USER_H
#ifndef USER_H
#define USER_H
#include <QObject>
#include <QString>
#include <QHostAddress>
#include <QDateTime>
#include <QDataStream>
class User : public QObject
{
Q_OBJECT
public:
User();
User(QString &firstName, QString &lastName);
User(const User &newUser);
~User();
void setIpAddress(const QHostAddress &newIpAddress);
void setConnectionDateTime(const QDateTime &newConnectionDateTime);
void setFirstName(const QString &newFirstName);
void setLastName(const QString &newLastName);
QString firstName() const {return userFirstName;}
QString lastName() const {return userLastName;}
QHostAddress ipAddress() const {return userIpAddress;}
QDateTime connectionDateTime() const {return userConnectionDateTime;}
quint16 userSize() const;
bool operator==(const User & other) const;
private:
QString userFirstName;
QString userLastName;
QHostAddress userIpAddress;
QDateTime userConnectionDateTime;
};
Q_CORE_EXPORT QDataStream & operator<<(QDataStream & out, const User &user);
Q_CORE_EXPORT QDataStream & operator>>(QDataStream & in, User &user);
#endif // USER_H
To copy to clipboard, switch view to plain text mode
user.cpp
#include "user.h"
#include <QByteArray>
#include <QDataStream>
User::User()
:userFirstName(""), userLastName("")
{
}
:userFirstName(firstName), userLastName(lastName)
{
}
User::User(const User &newUser)
{
userFirstName = newUser.firstName();
userLastName = newUser.lastName();
userIpAddress = newUser.ipAddress();
userConnectionDateTime = newUser.connectionDateTime();
}
User::~User()
{
}
{
userIpAddress = newIpAddress;
}
void User
::setConnectionDateTime(const QDateTime &newConnectionDateTime
) {
userConnectionDateTime = newConnectionDateTime;
}
void User
::setFirstName(const QString &newFirstName
) {
userFirstName = newFirstName;
}
void User
::setLastName(const QString &newLastName
) {
userLastName = newLastName;
}
quint16 User::userSize() const
{
stream << userFirstName << userLastName << userIpAddress << userConnectionDateTime;
quint16 size = array->size();
return size;
}
bool User::operator==(const User & other) const
{
bool state;
if (userFirstName == other.firstName() && userLastName == other.lastName())
state = true;
else
state = false;
return state;
}
{
out << user.firstName() << user.lastName() << user.ipAddress() << user.connectionDateTime();
return out;
}
{
in >> firstName >> lastName >> address >> dateTime;
user.setFirstName(firstName);
user.setLastName(lastName);
user.setIpAddress(address);
user.setConnectionDateTime(dateTime);
return in;
}
#include "user.h"
#include <QByteArray>
#include <QDataStream>
User::User()
:userFirstName(""), userLastName("")
{
}
User::User(QString &firstName, QString &lastName)
:userFirstName(firstName), userLastName(lastName)
{
}
User::User(const User &newUser)
{
userFirstName = newUser.firstName();
userLastName = newUser.lastName();
userIpAddress = newUser.ipAddress();
userConnectionDateTime = newUser.connectionDateTime();
}
User::~User()
{
}
void User::setIpAddress(const QHostAddress &newIpAddress)
{
userIpAddress = newIpAddress;
}
void User::setConnectionDateTime(const QDateTime &newConnectionDateTime)
{
userConnectionDateTime = newConnectionDateTime;
}
void User::setFirstName(const QString &newFirstName)
{
userFirstName = newFirstName;
}
void User::setLastName(const QString &newLastName)
{
userLastName = newLastName;
}
quint16 User::userSize() const
{
QByteArray *array = new QByteArray;
QDataStream stream(array, QIODevice::WriteOnly);
stream << userFirstName << userLastName << userIpAddress << userConnectionDateTime;
quint16 size = array->size();
return size;
}
bool User::operator==(const User & other) const
{
bool state;
if (userFirstName == other.firstName() && userLastName == other.lastName())
state = true;
else
state = false;
return state;
}
QDataStream &operator<<(QDataStream & out, const User &user)
{
out << user.firstName() << user.lastName() << user.ipAddress() << user.connectionDateTime();
return out;
}
QDataStream &operator>>(QDataStream & in, User &user)
{
QString firstName;
QString lastName;
QHostAddress address;
QDateTime dateTime;
in >> firstName >> lastName >> address >> dateTime;
user.setFirstName(firstName);
user.setLastName(lastName);
user.setIpAddress(address);
user.setConnectionDateTime(dateTime);
return in;
}
To copy to clipboard, switch view to plain text mode
In the other part of my program I am trying to put this class into QHash like this:
QHash<User, QTcpSocket *> connections;
To copy to clipboard, switch view to plain text mode
But when I try to compile it i get the error message:
../../../Qt_4.3.4/include/QtCore/../../src/corelib/tools/qhash.h instantiated from `bool QHash<Key, T>::contains(const Key&) const [with Key = User, T = QTcpSocket*]'
../../../Qt_4.3.4/include/QtCore/../../src/corelib/tools/qhash.h no matching function for call to `qHash(const User&)'
What shoud I do to make possible to add this class into QHash?
Thanks.
Bookmarks