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);
因此编译器搜索其中任何一个的重载。
我正在尝试在结构中定义 == 运算符:
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);
因此编译器搜索其中任何一个的重载。