为什么当我从向导中创建Visual Studio 2013中的C ++类时,我不需要从stdafx.h中包含标题

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

我发现了我无法解释的奇怪事。 当我在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文件永远不会单独编译。仅编译了您的cppc文件,并且在Preprocessor时将标题文件复制到它们时,它们是它们的。

这意味着如果您包含标题的所有CPP文件,请在在标题的包含之前具有您的命名空间,它将起作用。因为编译器将在编译该文件中编译标题的代码之前找到命名空间。

这不是好的练习。标题应该在它自己身上工作,而不是依赖于CPP文件在include之前做某事。

许可以下: CC-BY-SA归因
不隶属于 StackOverflow
scroll top