¿Por qué cuando creo una clase de c++ en visual studio 2013 de asistente no necesito incluir los encabezados de stdafx.h

StackOverflow https://stackoverflow.com//questions/25028808

Pregunta

He encontrado curiosidades cosa que no puedo explicar.Cuando yo uso la clase asistente de creación en VS2013 crearía mí .h and .archivos cpp definidas con base a la clase.

Ejemplo de archivo de encabezado:

#pragma once

class SomeClass
{
public:
    SomeClass();
    ~SomeClass();
};

Luego he añadido algunos utilizan.He incluido los encabezados con estos espacios de nombres en stdafx.enfermedades de transmisión sexual y sf de SFML se utilizan en mi app:

#pragma once

using namespace std;
using namespace sf;

class SomeClass
{
public:
    SomeClass();
    ~SomeClass();
};

Y todo funciona bien.stdafx.h no está incluido en el archivo de encabezado, sólo en .cpp.

Pero, a continuación, voy a ir con manual de creación de archivo de encabezado(sin .cpp) utilizando la misma estructura de la clase:

#pragma once

using namespace std;
using namespace sf;

class SomeOtherClass
{
     public:
        SomeOtherClass();
        ~SomeOtherClass();
}

Y no funciona.VS dice que no puede encontrar "sf" espacio de nombres, pero no hay problemas con la "std" espacio de nombres.

Y eso es lo que quiero saber:¿por qué el primer caso es válido y VS se han encontrado espacios de nombres de los encabezados precompilados y segundo caso no funciona.

¿Fue útil?

Solución

Archivos de encabezado nunca compilado solo.Sólo su cpp o c se compilan los archivos y los archivos de cabecera se copian a ellos por el preprocesador cuando #include ellos.

Eso significa que si todos los archivos cpp donde se incluyen una cabecera tiene sus espacios de nombres antes de la inclusión de la cabecera, va a trabajar.Debido a que el compilador de encontrar los espacios de nombres antes de compilar el código de la cabecera en el archivo.

No es buena práctica, aunque.Un encabezado debe trabajar en su propia y no depender de el archivo cpp hacer algo antes de que la incluyen.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top