The compiler give an error on the thing.hpp about something...lambda... is used but never defined.
The implementation (definition) of templates cannot be separated from their declaration, because the full definition is needed for a compiler to generate a function from a function template.
In other words, copy your things.cpp definition into your .hpp file.
PS: Instead of giving your interpretation/summary of the compiler error, it really helps to just verbatim copy-paste what the error is.
By doing that, it forced me to copy the code of updateScreen into the header file, and also force my to move the variable that I'm using in this function.
Basically, you need to declare window as extern in your header, and then define it in exactly one .cpp file.
Currently, as you have it, you break the "One-Definition Rule" because you have to remember that all #include does is directly paste the text of the header file; you are essentially declaring the separate globals with the same name in multiple translation units.