I have a class which contains an integer among some other things:
class Foo
{
public:
Foo() = default;
Foo(int x)
:
x(x)
{}
int operator+(const Foo& rhs)
{
return x + rhs.x;
}
private:
int x;
float whatever = 0.0f;
};
I also have a vector of these objects:
std::vector<Foo> foos{1, 2, 3, 4};
now, what I wanted to do was to use std::accumulate with the std::plus functor (or maybe some other STL function) to sum the X values of all elements in the vector, here's what I tried:
int sum = std::accumulate(foos.begin(), foos.end(), 0, std::plus<int>{});
But i'm getting a compiler error
Error C2440: "'initializing' : cannot convert from 'type1' to 'type2' 'conversion' : cannot convert from 'type1' to 'type2'"
what am i doing wrong, how do I go about fixing this?
You are trying to add an int
and a Foo
with a function that takes two Foo
s.
You could use a function that adds int
to Foo
:
// in Foo
friend int operator+(int lhs, const Foo& rhs)
{
return lhs + rhs.x;
}
Or you could use a function that adds two Foo
s
// in Foo
Foo operator+(const Foo& rhs)
{
return { x + rhs.x };
}
// in main
Foo sum = std::accumulate(foos.begin(), foos.end(), Foo(0), std::plus<Foo>{});