Actualización:

¿Cuáles son los efectos de la inclusión de stdafx.h en mis archivos de encabezado?


Empecé en un proyecto de C++ en Linux/Eclipse CDT e importados en Visual C++/Windows.

En Visual C++, comencé a usar encabezados precompilados para acelerar la compilación y definido stdafx.cpp y stdafx.h.

Aquí está mi stdafx.h

#pragma once

#include <string>
#include <vector>
#include <map>
...

y mi stdafx.cpp

#include "stdafx.h"

En cada .h and .archivo cpp, tengo lo siguiente:

#pragma once //if in a header file
#include "stdafx.h"

Tanto para la liberación y de depuración, he «Crear archivo de Encabezado Precompilado (/Yc)». Se compila bien en modo de depuración, pero en el modo de disparador se mantiene informes de

error LNK2005: [email protected]@[email protected]@U[email protected] already defined in A.obj

Si me cambio tanto a «Uso de encabezado precompilado», me sale en ambos Debug y Release

fatal error C1854: cannot overwrite information formed during creation of the precompiled header in object file:

¿Alguien sabe qué está pasando?

Por cierto, he creado un nuevo proyecto de prueba y la comparación de su PCH ajustes a la mía. Su configuración se Utiliza PCH. Ese proyecto compilado multa de alguna manera.

OriginalEl autor jameszhao00 | 2009-09-09

4 Comentarios

  1. 30

    Pones «crear archivo de encabezado precompilado» sólo para stdafx.cpp. A continuación, «el uso de encabezado precompilado» para todos los demás «.cpp» los archivos. Por último, han include "stdafx.h" al inicio de cada uno «.cpp» archivo (por lo general no en los archivos de encabezado.

    Yo sólo se puede establecer una configuración amplia de Crear PCH o el Uso de PCH.
    En el VS, usted puede hacer clic derecho en un archivo y seleccione «propiedades». A continuación, en «C++ -> encabezados Precompilados» puede establecer el valor de «crear» o la «utilización». La configuración de la configuración de todo se utiliza como valor predeterminado – probablemente debería establecer este «uso», a continuación, reemplazar por el stdafx.cpp
    Entonces, ¿cuáles son los efectos de la inclusión de stdafx.h en mis archivos de cabecera?
    Realmente no hay ningún efecto debido a que una misma cabecera de no definir un compilable unidad, son sólo parte de otras unidades compilables.
    Sé que esto es una vieja pregunta, pero estoy confundido en el «no suelen estar en los archivos de encabezado». Estás diciendo para incluir todos los archivos necesarios regularmente, por ejemplo.h y example.cpp debe incluir el archivo de encabezado precompilado y ejemplo.h? No se que significa que los archivos incluidos en el ejemplo.h se compilan dos veces – una vez en el pch y una vez en el ejemplo.h?

    OriginalEl autor 1800 INFORMATION

  2. 6

    La /Yc opción del compilador se utiliza para crear un encabezado precompilado para una compilación de acción. El /Yu opción indica al compilador que utilice un encabezado precompilado.

    Siempre uso el /Yu opción en la configuración del proyecto.
    En las páginas de propiedades para su stdafx.cpp archivo, el /Yc opción.

    Es importante entender que hay diferentes opciones de compilación para cada .cpp archivo
    .

    Ver aquí para los detalles de la /S opciones.

    Ah veo. Gracias.

    OriginalEl autor Aidan Ryan

  3. 4

    Poner el #pragma once antes de la #include "stdafx.h" que creo es que el compilador ignora la #pragma once directiva.

    También, no creo que usted debe poner el #include "stdafx.h" línea en los archivos de encabezado.

    Sí, suele poner #include «stdafx.h» como el primer incluyen de todo .archivo cpp. Yo creo que puede en realidad ser el primer no-línea de comentario.
    Así que, básicamente, tengo que incluir mis propios archivos de encabezado en el PCH? Lo que acerca la cara para compilar los encabezados (boost) que se hace referencia en mis propias cabeceras?
    Por ejemplo, si hago referencia Impulso en ambos stdafx y my_class.h, en my_class.cpp el Impulso que se hace referencia en my_class.h será omitido porque stdafx ya que se hace referencia?
    Incluso si un encabezado debe ser incluido en otra parte, una buena parte de la transformación sólo tiene que suceder como parte de la pre-compilar. Están incluidos los encabezados en el PCH para minimizar el procesamiento, se están incluyendo los encabezados en otros lugares, para proporcionar el tipo de información y definir las construcciones. El incluye son separadas que sirven propósitos.
    Mientras que esta respuesta señala algunos problemas, en realidad no responder a la pregunta tan lejos como el enlazador errores.

    OriginalEl autor GBegen

  4. 1

    Los resultados de la utilización de «stdafx.h» que no están influenciados por el Encabezado Precompilado sistema. Si desactiva Crear PCH/Uso PCH, el código se compila y genera el mismo resultado, excepto lo hace más lento. Esta es también la razón por la que usted puede utilizar en el código portable (a diferencia de #pragma once)

    OriginalEl autor MSalters

Dejar respuesta

Please enter your comment!
Please enter your name here