You must clearly decide who is the owner of the window, ie. who will create, store and destroy it.
If you pass pointers and references around, but nobody really stores the window object in first place, you'll always end up with dangling pointers/references and crashes.
You should also think more object-oriented. Classes are not meant to encapsulate data, but rather services. So for example, low-level window handling (GetEvent, Display, ...) should be encapsulated in the same class that owns the window object, and forwarded to the outside with a more straight-forward API.
I don't know enough about your application to give you a solution, but you could for example have a Application class that has a sf::Window member, and provides functions such as init(), run() and cleanup().
In regular object-oriented applications (not samples or demos), main() should really just consist of instanciating some kind of Application class and let it run.