我有一個類正確重載雙等於一類從派生的std :: vector的
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
};
我讀過很多的爭論免受性病::矢量<推導>,我想我會沒問題,因爲這個類不是從派生的。我在python中使用boost向量索引套件來暴露它,以充當python列表。因爲我所需要的構造做地消除施工期間列表中某些元素的一些工作,我決定去,而不是做什麼,我已經在這個項目做過的這條路線:
class AnotherItem {
// class definition
};
typedef std::vector<AnotherItem> AnotherItemList
然後露出列表帶有使用typedef的提升向量索引套件。除非我有這個錯誤,否則似乎很好:錯誤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);
}
};
這並沒有解決問題。我錯過了什麼?此鏈接here顯示vector的==運算符不是成員函數。我嘗試在「全局」級別重載(即不在名稱空間內),但這也沒有幫助。那麼,我錯過了什麼?
感謝, 安迪
你的第一個問題是來自'std :: vector' .. 。不能繼承不是從繼承的類型。而是使用合成(即內部存儲'std :: vector')。 –
你應該使'operator =='和'operator!='const-correct。 (即'bool operator ==(const Item&rhs)const {...') – Cornstalks
除了從矢量問題繼承的問題之外,錯誤是否告訴你RHS的期望?它是否提供任何近距離比賽? – juanchopanza