Does it work if you put all the code in the header? You said no, but then you said that it does work if you #include the cpp in the main source file. There shouldn't be another cpp file to include if you are trying it by putting all the template code into the header.
All the code that used to be in the source file should now be at the bottom of the header. Your header should have one set of include guards encompassing everything. That header should be included in your main source file. If you are doing that, it should work.