C++ is hard. It's a bona fide language, and it combines all of the memory management and low-level features of C with all the classes, polymorphism, inheritance, and naming features of OOP. That leads to one powerful language that's easy to mess up in, so learning OOP in C++ can be a big headache, and you need to know everything about what you're doing. I say this because I have a feeling you're not that great at C++ if you can't get header files to work. The whole purpose of the header/code structure is so that code is modular and it's easy to include stuff.
But... isn't operator overloading nice?
Complex c=Complex(4,5);
c=c.pow(Complex(-3,-4))*c.getConjugate();
logstream<<"Weirdarse number at: "<<c.toString();
And how about all that scoping? If you program correctly, you can't even mess with stuff you're not supposed to. That's bug prevention at its finest!
And what about polymorphism? Yknow, where you can have a class Athelete, and a bunch of child classes like Runner, Swimmer, Pole-Vaulter, but you can still train any athlete, and you can pass a Runner to a function that's only supposed to accept an Athlete. Loading heirarchical data structures is super easy with this method.
I'm even jealous of the system that minecraft has. To create a new enemy, you really just have to extend a class, call most of its parent's methods, then add more behaviors as needed.