0

「order」というクラスと、「orderbook」という別のクラスがあります。

オーダーブックには、注文のリストが含まれています。私がやりたいことは、注文の特定の値 (order.security) が既に注文帳に存在するかどうかを調べることです。

そのために、リストを循環してその値が存在するかどうかを確認するイテレータを作成しました。ただし、次の g++ エラーが発生するため、どこかで何か間違ったことをしているに違いありません。

エラー: '__first.std::_List_iterator<_Tp>::operator*() == __val' の 'operator==' に一致しません |

注: 機能はまだ完全ではありません

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();

};
4

1 に答える 1

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

find作業するには、2 つの s が等しいgenericBook.myListかどうかを確認する何らかの方法が必要です。orderを使用してこれを行いoperator ==ます。クラスは、 findorderが適切に機能するためにこの演算子を提供する必要があります。

== operatorfororderクラスをオーバーロードすることで解決できます。

于 2013-04-04T21:07:35.060 に答える