内存标准头文件和包含文件之间的区别

voi*_*urn 2 c++ exception include

我是 C++ 新手,我正在调试一个问题,其中allocate.h文件包含一个main.cpp文件。现在allocate.h文件有这样的第一行:#include <memory.h>。当我尝试编译时,main.cpp我收到一条错误消息说

Microsoft Visual Studio 11.0\ VC\ include\ typeinfo (153) : error
C2504 exception base class undefined
Run Code Online (Sandbox Code Playgroud)

但是当我将第一行更改为 :#include <memory>然后 main.cpp 编译正常。那是我开始在网上搜索这两种包含文件风格之间的区别的时候,我还没有找到任何详细的解释。如果有人能解释包含 .h 文件和内存标准头文件之间的区别,那将非常有帮助。
是不是因为#include<memory>线程更安全?还是因为它只是在 C++ 中包含文件的方式。

此外,我正在使用 cmake 将我的项目包含在 llvm 生成的解决方案中。生成我的.vcxproj文件时,它包含_HAS_EXCEPTIONS=0;在其中的<PreprocessorDefinitions>标记中。如果我使用较早的声明#include<memory.h>并_HAS_EXCEPTIONS=0;从<PreprocessorDefinitions>标记中删除,则项目编译正常。这一切是如何联系起来的?有人可以帮我把这些点联系起来吗?

use*_*267 7

<memory.h>并且<memory>不是不同的样式,它们是两个完全不同的标题。

<memory.h>看起来它是 MS 的 C 库使用的内部头文件,您不应该包含它,请使用标准的 C++ 头文件<memory>。