Почему, когда я создаю класс C ++ в Visual Studio 2013 от Wizard, мне не нужно включать заголовки из Stdafx.h

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

Вопрос

Я нашел куряческую вещь, которую я не могу объяснить. Когда я использую мастер создания класса в VS2013, он создал бы меня файлы .h и .CPP с определенной базой класса.

Пример заголовка файл:

#pragma once

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

Тогда я добавил некоторые призывы.Я включил заголовки с этими пространствами имен в Stdafx.STD и SF от SFML используются в моем приложении:

#pragma once

using namespace std;
using namespace sf;

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

и все работает нормально.stdafx.h не включен в заголовочный файл, только в .CPP.

Но потом я пойду с ручным созданием заголовочного файла (без .CPP), используя тот же класс структуры:

#pragma once

using namespace std;
using namespace sf;

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

И это не работает.VS говорит, что не может найти пространство имен SF «SF», но проблем с пространством «std» нет.

И это то, что я хочу знать: почему первый случай действителен, и VS обнаружил пространства имен из предложенных заголовков и второго случая не работает.

Это было полезно?

Решение

Файлы заголовка никогда не скомпилированы в одиночку.Составлены только ваши файлы cpp или c, а файлы заголовка копируются в них препроцессором при их генеракодицетах.

Это означает, что все ваши файлы CPP, в которых вы включите заголовок, имеют ваши пространства имен до включения заголовка, он будет работать.Поскольку компилятор найдет пространства имен перед компиляцией кода заголовка в этом файле.

Это не очень хорошая практика, хотя.Заголовок должен работать над своим собственным, а не полагаться на файл CPP, чтобы сделать что-то до включения.

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top