La différence entre struct et class, c'est la notion de visibilité par défaut. C'est la seule.
En gros, hors héritage, struct bidule { est équivalent à class bidule{ public:.
Mes trois conseils:
- N'utilise pas de visibilité dans une struct.
- Explicite toujours la visibilité dans une classe.
- Explicite toujours la visibilité des héritages.
Ainsi, ton code sera lisible (sur les visibilités), et tu éviteras les problèmes.