Your header file isn't just your public interface. It's a description of your data layout for the compiler. It is perfectly normal that the private members get shown in the header file. private
is not a security mechanism and never will be.
It's a bit strange, but it falls out from a simple yet efficient way of going about the problem.