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



我发现了一些我无法解释的奇怪的东西。当我在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已经从预编译的头和第二个情况下发现命名空间不工作。

头文件永远不会单独编译。只有你的cppc文件被编译,头文件被复制到他们的预处理器当你#include他们。

这意味着如果您包含头文件的所有cpp文件在包含头文件的之前都有您的命名空间,则可以正常工作。因为编译器会在编译该文件的头代码之前找到名称空间。

这不是一个好的做法。头文件应该自己工作,而不是依赖于cpp文件在include之前做一些事情。

相关内容

  • 没有找到相关文章

最新更新