Use opaque datatypes; Made C++ headers private