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

标签 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

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

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

最佳答案

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

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

关于c++ - 内存标准头和包含文件之间的区别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/23097743/

相关文章:

c++ - 使用 F5 键刷新列表控件 C++

c++ - 在 Cairo Surface 之前创建 Pango 布局

Java 从 SQL 异常返回 Double (java.lang.IllegalArgumentException)

Java 异常,将数据从 try block 传递到处理程序

c++ - 将 OpenCV 2 vector<Point2i> 转换为 vector<Point2f>

c++ - C++ 如何获取本地时间

c++ - 使用 std::string 时出现 bad_alloc 错误

node.js - Jade 中的变量包含原因

c++ - 包含顺序和隐藏的依赖关系

java - 为什么不同包含的jsp中的同名变量不会引发异常?