2013-04-04 91 views
0

我有一個名爲'order'的類,另一個名爲'orderbook'。C++,有對象列表的對象:不匹配'operator =='

訂單包含訂單列表。我想要做的是查找訂單中是否存在訂單的某個值(order.security)。

爲此,我創建了一個迭代器,它應該遍歷整個列表以查找該值是否存在。然而,我一定在某處做錯了什麼,因爲我得到以下g ++錯誤:

錯誤:'__first.std :: _ List_iterator < _Tp> :: operator *()=='中的'operator =='不匹配__val「|

注:該功能的arent還沒有全部完成

void matchOrder(order &orderEntry, orderbook &genericBook); 


void fillBook(order &orderEntry, orderbook &bookBUY, orderbook &bookSELL) 
{ 
    if (orderEntry.side == "S") 
     { 
      //Check if any buy can be fulfilled 
      matchOrder(orderEntry, bookSELL); 
     } 
} 

void matchOrder(order &orderEntry, orderbook &genericBook) 
{ 
    //scan book, if find a matching SECURITY, check order type and quantity (and price) 

    list<order>::iterator pos; 

    pos = find (genericBook.myList.begin(), genericBook.myList.end(), orderEntry); 

    if (pos != genericBook.myList.end()) 
     cout << "\n\n FOUND ONE!!!!!"; 
} 

參考,以下是我的訂單類:

class order{ 

public: 
    void getOrderData(int j, DATA fullData); 

    string security; 
    string type; 
    int quantity; 
    double price; 
    string name; 
    string side; 
}; 

和我的手持訂單類:

class orderbook 
{ 

public: 

    list<order> myList; 
    list<order>::iterator it; 
    void printItOut(); 

}; 
+1

'order'overload'operator =='? – chris 2013-04-04 21:03:52

+0

不,「訂單簿」也沒有。我會在頂部添加我的「訂單」類 – msmf14 2013-04-04 21:06:03

回答

0
pos = find (genericBook.myList.begin(), genericBook.myList.end(), orderEntry); 

爲了find到工作在genericBook.myList它需要一些方法來檢查兩個order是否相等。它通過使用operator ==來完成此操作。您的order類應提供此操作員以使查找正常工作。

您可以通過爲order類重載== operator來解決此問題。

+0

好的,我明白你的意思。在'order'類中重載'=='運算符是否仍然允許我爲訂單類的成員使用常規的'=='運算符? – msmf14 2013-04-04 21:13:29

+0

@ msmf14,是的,你定義了兩個參數類型,這就是它超載的原因。 – chris 2013-04-04 21:15:20

+0

@ msmf14當然可以。 'order1.security == order1.security'仍然是'字符串'比較,並且應該正常工作。其他成員也一樣。重載有助於解決像'order1 == order2'這樣的情況。即類別比較。 – 2013-04-04 21:15:35