2013-04-04 2 views
0

У меня есть класс под названием 'order', а другой - 'orderbook'.C++, Object со списком объектов: нет соответствия для 'operator =='

Книга заказов содержит список заказов. То, что я хотел бы сделать, это найти, существует ли определенное значение порядка (order.security) уже в книге заказов.

Для этого я создал итератор, который должен перебирать список, чтобы определить, существует ли это значение. Однако я должен что-то делать неправильно, так как получаю следующую ошибку g ++:

ошибка: нет соответствия для 'operator ==' in '__first.std :: _ List_iterator < _Tp> :: operator *() == __val '|

Примечание: функции Арент полный пока

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

Выполняет '' порядок 'overload' operator =='? – chris

+0

Нет, также 'orderbook'. Я добавлю класс 'order' сверху – msmf14

ответ

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

для find работа на genericBook.myList ему нужен какой-то способ проверки, если два order s равны. Он делает это, используя operator ==. Ваш класс order должен предоставить этому оператору возможность найти работу должным образом.

Вы можете решить это, перегрузив == operator по классу order.

+0

Хорошо, я понимаю, что вы имеете в виду. Перегрузив оператор '==' в классе 'order', все же разрешите использовать регулярный оператор' == 'для членов класса заказа? – msmf14

+0

@ msmf14, Да, вы определяете два типа параметров и поэтому перегружаете. – chris

+0

@ msmf14 Да, конечно. 'order1.security == order1.security' по-прежнему будет« строковым »сравнением и должен работать нормально. для других участников. Перегрузка помогает разрешать такие случаи, как 'order1 == order2'. т.е. сравнение по классу. – 2013-04-04 21:15:35

Смежные вопросы