Perché quando creo una classe C++ in Visual Studio 2013 dalla procedura guidata non ho bisogno di includere intestazioni da stdafx.h

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

Domanda

Ho trovato una cosa curiosa che non riesco a spiegare.Quando utilizzo la procedura guidata per la creazione di classi in VS2013, mi creerebbe file .h e .cpp con una base di classe definita.

File di intestazione di esempio:

#pragma once

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

Poi ho aggiunto alcuni usi.Ho incluso le intestazioni con questi spazi dei nomi in stdafx.std e sf da SFML sono utilizzati nella mia app:

#pragma once

using namespace std;
using namespace sf;

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

E tutto funziona bene.stdafx.h non è incluso nel file di intestazione, solo in .cpp.

Ma poi procederò con la creazione manuale del file di intestazione (senza .cpp) utilizzando la stessa struttura di classe:

#pragma once

using namespace std;
using namespace sf;

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

E non funziona.VS dice che non riesce a trovare lo spazio dei nomi "sf", ma non ci sono problemi con lo spazio dei nomi "std".

E questa è la cosa che voglio sapere:perché il primo caso è valido e VS ha trovato spazi dei nomi da intestazioni precompilate e il secondo caso non funziona.

È stato utile?

Soluzione

I file di intestazione non vengono mai compilati da soli.Solo il tuo cpp O c i file vengono compilati e i file di intestazione vengono copiati al loro interno dal preprocessore quando si #include loro.

Ciò significa che tutti i tuoi file cpp in cui includi un'intestazione hanno i tuoi spazi dei nomi Prima l'inclusione dell'intestazione, funzionerà.Perché il compilatore troverà gli spazi dei nomi prima di compilare il codice dell'intestazione in quel file.

Non è una buona pratica però.Un'intestazione dovrebbe funzionare da sola e non fare affidamento sul file cpp per fare qualcosa prima dell'inclusione.

Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top