C++ generally doesn't allow you to pass an actual array as a function parameter. It has a convenience feature that makes you think that's possible, in that you can actually pass a pointer.
In other words:
void initPoints(sf::Vector2f points[]);
Is the same thing as
void initPoints(sf::Vector2f* points);
Note that initPoints doesn't know the length of points, so generally you also pass a length parameter:
void initPoints(sf:Vector2f* points, size_t length);
What you're trying to do simply isn't valid pre-C++11. In C++11 you can overload initPoints() to take a std::initializer_list<sf::Vector2f>, and the syntax will work fine.
The kind of array you're using is often called a "C-style array." It exists in C, and has existed in C++ from the beginning. It has various limitations, such as what you've just run into. It looks like you really want a std::vector. There is some nuance to using std::vectors, and I don't know your level of C++ understanding, so I don't know if the phrases "usually you don't want to pass them by value" or "I would recommend you imitate STL functions and pass begin/end iterators instead" mean anything to you. You will eventually come across the parts of the language that make those statements useful. You don't need to worry about them right now.
sf::Vector2f points[]really meanssf::Vector2f* points. It is a syntactic strangeness of the language.{a, b, c}is not an array. It is a special kind of initializer that can be used to initialize arrays. But it cannot be used to initialize a pointer. As I said in my first comment, your function's parameter is a pointer.int*is a pointer to anint. That's all. The thing it, C++ gets pointer arithmetic from C, so you can use a pointer to an int to access ints next to it, which means you can almost treat a pointer to int as an array of int. This is so confusing and dangerous that you'll quickly learn to avoid it and use types with better defined semantics.