使用 accumulate 时,C++ 中的 operator+ 不匹配

No match for operator+ in C++ while using accumulate

我正在尝试计算条目的平均值,但由于某种原因我收到了意外错误:

error: no match for ‘operator+’ (operand types are ‘double’ and ‘const OrderBookEntry’)
  __init = __init + *__first;" 
              ~~~~~~~^~~~~~~~~~

我是 C++ 的新手,尝试解决了一段时间,但没有任何效果。

int MerkelBot::predictMarketPrice()
{
    int prediction = 0;
    for (std::string const& p : orderBook.getKnownProducts())
    {
        std::cout << "Product: " << p << std::endl;
        std::vector<OrderBookEntry> entries = orderBook.getOrders(OrderBookType::ask, 
                                                                p, currentTime);

    double sum = accumulate(entries.cbegin(), entries.cend(), 0.0);
    prediction =  sum / entries.size();
    std::cout << "Price Prediction is: " << prediction << std::endl;
    }
}

The error

问题是您要求编译器添加 OrderBookEntry 个对象,但编译器不知道该怎么做。

你必须通过添加 OrderBookEntry 个对象来告诉编译器你的意思。一种方法是重载 operator+

double operator+(double total, const OrderBookEntry& x)
{
    // your code here that adds x to total
}

但可能更好的方法是忘记 std::accumulate 并只写一个 for 循环来做加法。

double sum = 0.0;
for (auto const& e : entries)
    sum += e.something(); // your code here

something 替换为您要加起来的任何内容。

您可能不想添加图书条目,而是想要添加图书价格。您可以将函数传递给 std::accumulate:

double sum = std::accumulate(entries.cbegin(), entries.cend(), 0.0, [](double sum, const OrderBookEntry &bookEntry) {
    return sum + bookEntry.price;
});