我正在尝试创建一个unordered_set
如下Intervals
定义的:
struct Interval {
unsigned int b; //begining index
unsigned int e; //end index
bool updated; //true if concat. initially false
int patternIndex; //pattern index. valid for single pattern
int proteinIndex; //protein index. for retrieving the pattern
};
struct Hash {
size_t operator()(const Interval &interval) const;
};
struct IntervalEquality {
bool operator == (Interval const &lhs, Interval const &rhs);
};
bool IntervalEquality::operator == (Interval const &lhs, Interval const &rhs){
return ((lhs.b == rhs.b) && (lhs.e == rhs.e) && (lhs.proteinIndex == rhs.proteinIndex));
}
size_t Hash::operator()(const Interval &interval) const{
string temp = to_string(interval.b) + to_string(interval.e) + to_string(interval.proteinIndex);
return hash<string>()(temp);
}
unordered_set<Interval, Hash> test;
在这里,我==
在我的头文件中声明运算符并在我的 .cpp 文件中定义它(就像我成功为其他运算符所做的那样)。当我编译上面的代码时,我得到关于==
只需要一个参数的运算符的错误。例如,'bool IntervalEquality::operator==(const Interval&, const Interval&)' must take exactly one argument
如果我尝试采用替代路线并在我的头文件中声明和定义,如下所示:==
bool operator == (Interval const& lhs, Interval const& rhs){
return (lhs.b == rhs.b) &&
(lhs.e == rhs.e) &&
(lhs.proteinIndex == rhs.proteinIndex);
}
我收到关于多个定义的错误==
有谁知道我该如何解决这个问题?非常感谢帮助!