Tengo un archivo de encabezado denominado stdafx.h y este es precompilado de curso.
He leído que debo incluir estos archivos en mi .archivos cpp, pero algunas de estas afirmaciones son ya necesarios en el archivo de encabezado que viene con eso.

Debo agregar la stdafx en mi cabecera o en mi cpp? Pensé que era una buena práctica para ponerlo en la cabecera, pero me parece que estoy obligado a ponerlo en el encabezado de lugar.

Ejemplo:

stdafx contiene freeglut.

mi archivo de encabezado de clase tiene un atributo de GLenum.

Debería incluir la stdafx en el .h de la clase?

InformationsquelleAutor Marnix | 2011-03-08

2 Comentarios

  1. 25

    stdafx.h debe ser el primer incluir en CADA archivo cpp en su proyecto.


    Considere la posibilidad de que C++ no se compila archivos de encabezado, sólo archivos Cpp.

    Por lo tanto, si el stdafx es la primera incluir en el archivo cpp, entonces el compilador va a tener todo el archivo de encabezado necesidades, cuando llega a la cabecera de archivo en el archivo Cpp.

    por ejemplo,

    Tiene A.cpp & A. h.

    A. h las necesidades de las ets:string.

    tiene B.cpp & B. h

    B. h de las necesidades de A. h por lo tanto B. h necesidades std::string demasiado.

    Porque es una buena práctica, poner #include <string> en stdafx.h.

    Su compilación falla, porque nada puede ver std::string

    A poner ahora stafx.h como el primer incluir en A.cpp y B.cpp.

    Cuando el compilador de éxitos A.cpp, de la que recoge la incluyen para <string>, a continuación recoge A. h, y todo es feliz porque sabemos lo std::string.

    El compilador ahora hits B.cpp, de nuevo se incluye stdafx en primer lugar, que trae <string>, a continuación, golpea B. h, que trae A. h, que es de nuevo feliz porque std::string ya ha sido incluido.

    Espero que esto ayude.

    • Su comentario de que «de C++ no se compila archivos de encabezado, sólo archivos Cpp» no tiene ningún sentido, o es completamente equivocada. Por favor aclarar.
    • Estoy tratando de decir, el compilador no mirar nunca a una .h archivo en sí mismo, es sólo mirar a una .h archivo en el contexto de donde se incluye en un archivo cpp.
    • Gotcha. Eso es cierto en general, aunque estoy seguro de que podría obligar a un compilador para compilar un .H archivo directamente como una unidad de traducción propia. Y, de hecho, esto es, en cierto modo, el punto de PCH’s. Pero cuando el compilador ve «en» un H de archivo a través de un #include declaración, es compilado.
    • Estoy tratando de simplificar las cosas para el autor de la pregunta. He encontrado en el pasado que la «mentira» de que sólo los archivos Cpp ser compilado a menudo es una útil herramienta de aprendizaje. Esto ayuda a que la gente deje de atar a sí mismos en los nudos tratando de averiguar por qué el compilador de repente se queja acerca de un archivo de encabezado que estaba trabajando perfectamente el día de ayer (por ejemplo, resulta que había cambiado el incluir el orden en un nuevo módulo, sin embargo, pasar una hora mirando el archivo de encabezado, no se cómo/qué/dónde está incluido).
    • Extraño que yo no creo en eso. Parece bastante lógico que stdafx está en frente de el .h archivo, por lo que también se encuentra el stdafx. Gracias por la buena práctica de consejos.
    • Que el texto en negrita. Ahora entiendo por qué no lo incluyen.

  2. 6
    • Sólo incluyen cosas en su encabezado precompilado que debería estar allí
    • Su archivo de encabezado precompilado debe ser la primera incluir en cada .cpp
    • Me gustaría evitar su inclusión en otro encabezado en favor de la declaración forward

    Hágase estas dos preguntas antes de incluir algo en stdafx.h

    1. Se esta encabezado nunca ser cambiado por mí?
    2. Necesito que este incluido en cada varios archivos de código fuente?

    Si la respuesta es «No» a cualquiera de los que entonces no lo incluyen.

Dejar respuesta

Please enter your comment!
Please enter your name here