Я нашел любопытную вещь, которую не могу объяснить. Когда я использую мастер создания классов в 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», но с пространством имен «std» проблем нет.
И это то, что я хочу знать: почему первый случай действителен, а VS нашел пространства имен из предварительно скомпилированных заголовков, а второй случай не работает.
using namespace X
в заголовочных файлах. Это затрудняет повторное использование ваших заголовочных файлов. - person MSalters   schedule 30.07.2014