Хотя это, безусловно, возможно сделать так же, как и вы, стандартная практика заключается в том, чтобы поместить общие объявления в заголовочные файлы (.h) и определения функций и переменных - реализацию - в исходные файлы (.cpp).
Как соглашение, это помогает понять, где все находится, и делает четкое различие между интерфейсом и реализацией ваших модулей. Это также означает, что вам никогда не нужно проверять, включен ли .cpp-файл в другой, перед добавлением чего-то к нему, которое может сломаться, если оно было определено в нескольких разных единицах.