La segunda cuestión respecto a los ficheros de cabecera es ésta: cuando se pone una declaración de struct en un fichero de cabecera, es posible que el fichero sea incluido más de una vez en un programa complicado. Los iostreams son un buen ejemplo. Cada vez que una struct hace E/S puede incluir uno de los ficheros de cabecera iostream. Si el fichero cpp sobre el que se está trabajando utiliza más de un tipo de struct (típicamente incluyendo un fichero de cabecera para cada una), se está corriendo el riesgo de incluir el fichero <iostream> más de una vez y redeclarar los iostreams.
El compilador considera que la redeclaración de una estructura (eso es aplicable tanto a las struct como a las class) es un error, dado que de otro modo permitiría el uso del mismo nombre para tipos diferentes. Para evitar este error cuando se incluyen múltiples ficheros de cabecera, es necesario dar algo de inteligencia a los ficheros de cabecera usando el preprocesador (los ficheros de cabecera estándares como <iostream> también tienen esta «inteligencia»).
Tanto C como C++ permiten redeclarar una función, siempre que las dos declaraciones coincidan, pero ninguno de los dos permite la redeclaración de una estructura. En C++ esta regla es especialmente importante porque si el compilador permitiera la redeclaración de una estructura y las dos declaraciones difirieran, ¿cuál debería usar?
El problema de la redeclaración aparece con bastante frecuencia en C++ porque cada tipo de dato (estructura con funciones) generalmente tiene su propio fichero de cabecera, y hay que incluir un fichero de cabecera en otro si se quiere crear otro tipo de dato que use al primero. Es probable que en cualquier fichero cpp de su proyecto se incluyan varios ficheros que incluyan al mismo fichero de cabecera. Durante una única compilación, el compilador puede ver el mismo fichero de cabecera varias veces. A menos que se haga algo al respecto, el compilador verá la redeclaración de la estructura e informará de un error en tiempo de compilación. Para resolver el problema, necesitará saber un poco más acerca del preprocesador.