为什么当我从向导中创建Visual Studio 2013中的C ++类时,我不需要从stdafx.h中包含标题
-
21-12-2019 - |
题
我发现了我无法解释的奇怪事。
当我在VS2013中使用类创建向导时,它将创建ME .h和.cpp文件,具有定义的类。
示例头文件:
#pragma once
class SomeClass
{
public:
SomeClass();
~SomeClass();
};
.
然后我添加了一些兴趣。我在stdafx中包含带有这些命名空间的标题。SFML的STD和SF用于我的应用程序:
#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已从预编译标头中找到命名空间,第二个案例不起作用。
解决方案
header文件永远不会单独编译。仅编译了您的cpp
或c
文件,并且在Preprocessor时将标题文件复制到它们时,它们是它们的。
这意味着如果您包含标题的所有CPP文件,请在在标题的包含之前具有您的命名空间,它将起作用。因为编译器将在编译该文件中编译标题的代码之前找到命名空间。
这不是好的练习。标题应该在它自己身上工作,而不是依赖于CPP文件在include之前做某事。
不隶属于 StackOverflow