クラスがあります
class Item {
int _one;
int _two;
int _three;
// other stuff
};
class ItemList : public std::vector<Item> {
// deriving from std vector because the ctor needs to
// perform some work in discriminating what gets added
// to the list
};
std::vector<> からの派生に反対する多くの引数を読みましたが、このクラスは派生元ではないため、問題ないと思います。これを Python で公開し、ブースト ベクター インデックス作成スイートを使用して、Python リストとして機能させます。構築中にリストから特定の要素を削除するためにコンストラクターが何らかの作業を行う必要があったため、プロジェクトの他の場所で行ったことを行う代わりに、このルートに進むことにしました。
class AnotherItem {
// class definition
};
typedef std::vector<AnotherItem> AnotherItemList
次に、typedef を使用してブースト ベクター インデックス スイートでリストを公開します。このエラーがあることを除いて、すべてうまくいくようです: エラー 2 エラー C2678: バイナリ '==' : タイプ 'Item' の左側のオペランドを取る演算子が見つかりません (または、受け入れ可能な変換がありません)
エラーはブースト ライブラリからではなく、std アルゴリズム コード内の何かから発生しています。独自のクラスにオーバーロードされた == 演算子を追加しようとしましたが、問題は解決していません。次のようになります。
class Item {
// earlier stuff
bool operator==(Item& rhs) {
return (_one == rhs._one && _two == rhs._two && _three == rhs._three);
}
bool operator!=(Item& rhs) {
return !(*this == rhs);
}
};
これは問題を解決していません。私は何が欠けていますか?このリンクは、ベクターの == 演算子がメンバー関数ではないことを示しています。「グローバル」レベル (つまり、名前空間内ではない) でオーバーロードを試みましたが、これも役に立ちませんでした。それで、私は何が欠けていますか?
ありがとう、アンディ