Por que quando crio uma classe c++ no visual studio 2013 a partir do assistente, não preciso incluir cabeçalhos de stdafx.h

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

Pergunta

Encontrei coisas curiosas que não consigo explicar.Quando eu uso o assistente de criação de classe no VS2013, ele cria arquivos .h e .cpp com base de classe definida.

Exemplo de arquivo de cabeçalho:

#pragma once

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

Então adicionei alguns usos.Incluí cabeçalhos com esses namespaces no stdafx.std e sf do SFML são usados ​​no meu aplicativo:

#pragma once

using namespace std;
using namespace sf;

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

E tudo funciona bem.stdafx.h não está incluído no arquivo de cabeçalho, apenas em .cpp.

Mas então irei com a criação manual do arquivo de cabeçalho (sem .cpp) usando a mesma estrutura de classes:

#pragma once

using namespace std;
using namespace sf;

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

E não funciona.O VS diz que não consegue encontrar o namespace “sf”, mas não há problemas com o namespace “std”.

E é isso que eu quero saber:por que o primeiro caso é válido e o VS encontrou namespaces de cabeçalhos pré-compilados e o segundo caso não funciona.

Foi útil?

Solução

Os arquivos de cabeçalho nunca são compilados sozinhos.Somente seu cpp ou c arquivos são compilados e os arquivos de cabeçalho são copiados neles pelo pré-processador quando você #include eles.

Isso significa que se todos os seus arquivos cpp onde você inclui um cabeçalho tiverem seus namespaces antes a inclusão do cabeçalho, funcionará.Porque o compilador encontrará os namespaces antes de compilar o código do cabeçalho nesse arquivo.

Porém, não é uma boa prática.Um cabeçalho deve funcionar por conta própria e não depender do arquivo cpp para fazer algo antes da inclusão.

Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top