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

标签 c++ visual-studio include header-files stdafx.h

我发现了我无法解释的古玩。 当我在 VS2013 中使用类创建向导时,它会为我创建具有定义类基础的 .h 和 .cpp 文件。

示例头文件:

#pragma once

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

然后我添加了一些用法。我在 stdafx 中包含了带有这些 namespace 的 header 。 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 从预编译头文件中找到命名空间而第二种情况不起作用。

最佳答案

头文件从不单独编译。只有你的 cppc 文件被编译,当你 #include 时,预处理器将头文件复制到它们中。

这意味着,如果包含 header 的所有 cpp 文件在包含 header 之前都有您的 namespace ,它就会起作用。因为编译器会在编译该文件中的 header 代码之前找到命名空间。

但这不是好的做法。 header 应该独立工作,而不是依赖 cpp 文件在包含之前执行某些操作。

关于c++ - 为什么当我从向导在 Visual Studio 2013 中创建 C++ 类时,我不需要包含来自 stdafx.h 的 header ,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25028808/

相关文章:

c++ - "address not from malloc()"使用电子围栏出错

c++ - 垂直工具栏上的渲染子工具

visual-studio - 调试期间算术下溢或上溢异常

c++ - 当我尝试使用 xerces "visual studio 2010"释放内存时,我的项目崩溃了

python - 使用 Python 将代码直接导入脚本?

c++ - 包括 stdafx.h winsock2 重新定义错误

c++ fstream不打印像ρ和Δ这样的符号来正确归档

c++ - std::thread 构造函数如何检测右值引用?

visual-studio - Visual Studio 2015 Preview 中的 Windows Phone 8.0 应用程序打包

compilation - 我如何编译这个“鸡计划”代码?