Might as well toss out a few more nitpicks while they're easy to fix:
1) When you write this:
sf::RenderWindow window = sf::RenderWindow();
A temporary RenderWindow gets constructed, then RenderWindow "window" gets constructed using copy assignment, then the temporary RenderWindow gets destroyed. This is kinda wasteful, so just let "window" default construct itself:
sf::RenderWindow window; // yes, this is a default constructor call
2) Passing by pointer is certainly a big improvement over your first attempt, but when I said "pass by reference" I was referring to C++ references, which are often better than raw pointers. startWindow with references would be:
void startWindow(sf::RenderWindow& window) // &, not *
{
std::vector<sf::VideoMode> i = sf::VideoMode::getFullscreenModes();
window.create(i.front(), "SFML WORKS!", sf::Style::Fullscreen); // ., not ->
}
References can't be null, they don't allow unsafe things like pointer arithmetic, and they retain the efficiency bonus you get from passing by pointer instead of (copied) value. So for the simple use case of efficiently passing arguments, references are generally preferable to pointers.
3)
#include<array>
This is interesting since you're using std::vector and no std::arrays. Perhaps you should include <vector> instead. =)