2013-04-04 89 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