The most important thing about headers to is avoid defining functions or variables inside the header. Otherwise you're setting yourself up for "multiply defined symbol" errors if two source files include the header. You should declare code/variables in headers and define them in source files. There are exceptions. It's okay to define inline functions/methods or const variables.
Another cardinal sin is putting a "using" statement in a header (e.g., usingnamespace std;). That "using" functionality carries on to any other headers that might be included later and can have unexpected consequences. If your header needs something from a namespace (like std::string) then use the fully qualified name (e.g. std::string).