For me I have a VERY difficult time structuring my program to have functions, objects and everything else interface seamlessly with each other. Most of my time spent making games go to structuring, which is somewhat fun but admittedly confusing and VERY time consuming. My other trouble for the moment is pointers but I am starting to grasp them little bit by little bit. Any of you
It pays to consider what you want you program to do before any typing. A lot of people will sit down and begin to hack away, on;y to find themselves in a corner, not being able to integrate their code into their program.
UML, or the unified modelling language, is a diagramming style which helps in creating an outline of how all the classes should interact and derive from each other. You can use this to help design a system which is easily maintainable and up-gradable. One of the core concepts of c++ is extensibility; the code should be written in such a way as to allow the programmer to easily extend the codes functionality without changing the already in-use interface. UML helps with this.
Even if you don't use UML, just thinking about how your program works BEFORE you do anything helps tremendously.
The biggest issue that I seem to have is ensuring cross-platform compilation (when it's absolutely necessary). Outside of my nice MSVC environment lurks more often than not archaic, not so well documented, GCC settings (most recently, --kill-at for resolving a name-mangling issue when integrating a native code-base with a Java frontend GUI).
Building boost with minGW was also quite a conundrum, as the minGW version that I was compiling with was a single minor version off (with no other guide in sight). Needless to say, the entire process was quite broken and took a very long time to get right...I'm still not 100% convinced that the minGW compiler built boost::thread correctly...
 -- Not convinced? Search google for "--kill-at" and see for yourself. Zero Results.