-1

我想使用一个QHash<MyOwnClass&, MyOwnEnum>MyOwnClass如果它确实重要的成员)。文档说应该定义一个全局qhash(MyOwnClass&)函数。好的,例如:

全局变量.h:

#pragma once
#include "myOwnClass.h"
#include <QHashFunctions>

class MyOwnClass;

inline uint qHash(MyOwnClass& clz);

globals.cpp:

#include "globals.h"

inline uint qHash(MyOwnClass& clz) {
    return qHash(clz.getSomeQStringMember());
}

我应该在哪里包含 my globals.h,以便编译器能够看到和使用它?

我正在使用 MSVS2015 和 Qt 5.8。我相信这个问题很愚蠢并且有非常简单的解决方案,只要答案能帮助像我这样的许多人。

4

2 回答 2

1

如果您有一个将在散列中使用的自定义类型,最好在声明MyOwnClass. 毕竟它与那个类齐头并进,你不需要 aglobals.h来拥有一个全局函数,它只需要在全局范围内而不是静态的。

您还必须在#include <QHash>哪里定义散列函数(实现),以便它可以访问现有的散列实现。

编辑:我看到你包含#include <QHashFunctions>了应该给你哈希 a 的函数QString。所以你可能需要清理和重建你的项目。

于 2017-05-14T13:13:13.873 回答
0

@dtech 的答案值得一读,但它并没有完全解决我的问题。

不能将非常量引用用作 中的键QHash,因此我应该将其声明为QHash<const MyOwnClass&, MyOwnEnum>并定义函数qHash(const MyOwnClass& clz)(当然,只要是相等运算符)。

于 2017-05-14T15:48:53.183 回答