Pourquoi, lorsque je crée une classe C++ dans Visual Studio 2013 à partir de l'assistant, je n'ai pas besoin d'inclure les en-têtes de stdafx.h

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

Question

J'ai trouvé des curiosités que je ne peux pas expliquer.Lorsque j'utilise l'assistant de création de classe dans VS2013, cela me crée des fichiers .h et .cpp avec une base de classe définie.

Exemple de fichier d'en-tête :

#pragma once

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

Ensuite, j'ai ajouté quelques utilisations.J'ai inclus des en-têtes avec ces espaces de noms dans stdafx.std et sf de SFML sont utilisés dans mon application :

#pragma once

using namespace std;
using namespace sf;

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

Et tout fonctionne bien.stdafx.h n'est pas inclus dans le fichier d'en-tête, uniquement dans .cpp.

Mais ensuite, j'opterai pour la création manuelle du fichier d'en-tête (sans .cpp) en utilisant la même structure de classe :

#pragma once

using namespace std;
using namespace sf;

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

Et ça ne marche pas.VS dit qu'il ne trouve pas l'espace de noms "sf", mais il n'y a aucun problème avec l'espace de noms "std".

Et c'est ce que je veux savoir :pourquoi le premier cas est valide et VS a trouvé des espaces de noms à partir des en-têtes précompilés et le deuxième cas ne fonctionne pas.

Était-ce utile?

La solution

Les fichiers d'en-tête ne sont jamais compilés seuls.Seulement votre cpp ou c les fichiers sont compilés et les fichiers d'en-tête y sont copiés par le préprocesseur lorsque vous #include eux.

Cela signifie que si tous vos fichiers cpp dans lesquels vous incluez un en-tête ont vos espaces de noms avant l'inclusion de l'en-tête, cela fonctionnera.Parce que le compilateur trouvera les espaces de noms avant de compiler le code de l'en-tête dans ce fichier.

Ce n'est cependant pas une bonne pratique.Un en-tête doit fonctionner seul et ne pas s'appuyer sur le fichier cpp pour faire quelque chose avant l'inclusion.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top