以下に定義されているように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 ファイルで定義しています (他の演算子でうまく行っているように)。上記のコードをコンパイルすると、==
引数が 1 つだけ必要な演算子に関するエラーが発生します。例えば、'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);
}
複数の定義に関するエラーが表示されます==
これを解決する方法を知っている人はいますか? 大変助かりました!