我是 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/