C++ 结构中的运算符==

operator== in C++ struct

我正在尝试在结构中定义 == 运算符:

typedef struct _tBScan {
    QString strQuadpackNumbers;
    uint uintBegin, uintEnd;
    bool operator==(const struct _tBScan& a, const struct _tBScan& b) {
        return (a.strQuadpackNumbers.compare(b.strQuadpackNumbers) == 0 &&
                a.uintBegin == b.uintBegin && a.uintEnd == b.uintEnd);
    }
} tBScan;

这不会编译,我得到:

C2804: binary 'operator ==' has too many parameters
C2333: '_tBScan::operator ==' error in function: declaration: skipping function body

我正在使用 Qt 5.9.2 和 MSVC 2015,我需要定义它以便我可以使用 QList 比较函数。

作为成员函数重载二元运算符时,第一个参数是this指针。在您定义的签名中 operator==,它将采用 3 个参数。但是,只能带两个。

在你的情况下,我建议将其设为非成员函数。

typedef struct _tBScan {
    QString strQuadpackNumbers;
    uint uintBegin, uintEnd;
} tBScan;

bool operator==(const struct _tBScan& a, const struct _tBScan& b) {
        return (a.strQuadpackNumbers.compare(b.strQuadpackNumbers) == 0 &&
                a.uintBegin == b.uintBegin && a.uintEnd == b.uintEnd);
}

当您重载时,比方说,operator@ 表达式 _tBScan @ _smt 被解析为。

_tBScan.operator@(_smt);

当它不是成员函数时,表达式被解析为

operator@(_tBScan, _smt);

因此编译器搜索其中任何一个的重载。