使用 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;
});
我正在尝试计算条目的平均值,但由于某种原因我收到了意外错误:
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;
});