我有一堂课
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 中公开这个,使用 boost 矢量索引套件,作为 python 列表。因为我需要构造函数在构造过程中从列表中删除某些元素,所以我决定走这条路,而不是做我在项目其他地方所做的事情:
class AnotherItem {
// class definition
};
typedef std::vector<AnotherItem> AnotherItemList
然后使用 typedef 使用 boost 矢量索引套件公开列表。一切似乎都很好,除了我有这个错误:错误2错误C2678:二进制'==':没有找到采用'Item'类型的左手操作数的运算符(或者没有可接受的转换)
该错误不是来自 boost 库,而是来自 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);
}
};
这并没有解决问题。我错过了什么?此处的此链接显示向量的 == 运算符不是成员函数。我尝试在“全局”级别重载(即不在命名空间内),但这也无济于事。那么,我错过了什么?
谢谢,安迪