Ich versuche nun schon seit Stunden eine Hashmap mit eigener Key class zu nutzen. Ich habe alles so wie in der QT Docu implementiert.
Es kopiliert, aber der Linker schreit zum Schluss immer, dass er die zwei Functionen nicht findet.
Wenn ich die find() methode auf die hashmap auskommentiere dann kompiliert und linkt es ohne murren.
Hier der Linkerfehler:
Header file connectionitem.h:../../../../Qt/2009.01/qt/include/QtCore/../../src/corelib/tools/qhash.h:(.text$_ZNK5QHashI14ConnectionItemPN9Rootcause7thQueueIP9TCPPacketEEE8findNodeERKS0_Pj[QHash<ConnectionItem, Rootcause::thQueue<TCPPacket*>*>::findNode(ConnectionItem const&, unsigned int*) const]+0xe): undefined reference to `qHash(ConnectionItem const&)'
../../../../Qt/2009.01/qt/include/QtCore/../../src/corelib/tools/qhash.h:(.text$_ZN9QHashNodeI14ConnectionItemPN9Rootcause7thQueueIP9TCPPacketEEE8same_keyEjRKS0_[QHashNode<ConnectionItem, Rootcause::thQueue<TCPPacket*>*>::same_key(unsigned int, ConnectionItem const&)]+0x29): undefined reference to `operator==(ConnectionItem const&, ConnectionItem const&)'
Code: Alles auswählen
class ConnectionItem
bool operator==(const ConnectionItem& c1, const ConnectionItem& c2);
unsigned int qHash(const ConnectionItem& item);
class ConnectionItem
{
private:
int ip;
int port;
public:
ConnectionItem(int ip, int port);
virtual ~ConnectionItem() {}
friend unsigned int qHash(const ConnectionItem& item)
friend bool operator==(const ConnectionItem& c1, const ConnectionItem& c2)
};
Code: Alles auswählen
#include "connectionitem.h"
#include <QHash>
unsigned int qHash(const ConnectionItem& item)
{
return (qHash(item.ip) ^ qHash(item.port);
}
inline bool operator==(const ConnectionItem& c1, const ConnectionItem& c2)
{
return (c1.ip == c2.ip && c1.port == c2.port);
}
Code: Alles auswählen
#include "connectionitem.h"
#include <QHash>
...
QHash< ConnectionItem, thQueue<TCPPacket*>* > connections_;
connections_.find(ConnectionItem(1,2));
Danke im Vorraus,
Grüße, secreator