1. For variable names I would say camelcase is preferable, its easier to recognize distinct words in the name.
2. I like the m_ prefix in members, better than the plain m, because it's also consistent with camelcase for variables. I wouldn't like e.g g_ for global variables or s_(scoped?) because it makes code obscure.
3. The solution you found seems ok.
4. Bad thing with typedefs is that they depend on the level of abstraction, so I think it's hard to come up with a single rule on this. I like integer types having the _t suffix because it makes code more intuitive, I wouldn't like an eg. std::list typedef to have it though.