gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 07:21:50 27 4
gpt4 key购买 nike

我发现了我无法解释的古玩。当我在 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com