c++ - 包含 2 个头文件时类型重定义错误

标签 c++ visual-studio-2010 matlab mex

我正在编译一个Matlab mex文件(在Windows下使用VS2010),以下2个包括:

#include <algorithm> // for std::copy
#include "mex.h"

给我编译错误:

1>d:\svn\trunk\dev\matlab\extern\include\matrix.h(337): error C2371: 'char16_t' : redefinition; different basic types

我试过把它放在一个命名空间中:

namespace Algo {    
    #include <algorithm>
}

但随后我得到了大量其他编译错误,甚至没有使用 <algorithm> 中定义的任何内容,例如:

Error   1   error C2039: 'set_terminate' : is not a member of '`global namespace''  C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception    192
Error   2   error C2873: 'set_terminate' : symbol cannot be used in a using-declaration C:\Program Files (x86)\Microsoft Visual Studio 10.0\VC\include\exception    192

我该如何解决这个问题?

最佳答案

将标准 header 放入命名空间听起来不是个好主意,即使您没有使用那里的任何方法或类,也很有可能另一个 header (如 mex.h) .将命名空间放在 mex header 周围似乎不太可能造成冲突。

在另一个标题之前包含一个标题也可以防止此类冲突。一些 header 考虑到某些符号在重新定义它们之前可能已经被定义(库开发人员真的应该注意这样做)

在某些情况下,阅读 header 也可能会给您提供一个很好的线索。有时它可能就像定义一个符号一样简单,它告诉 header 跳过重新定义。

关于c++ - 包含 2 个头文件时类型重定义错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8984045/

相关文章:

c++ - QFileDialog 在重启后只工作一次(否则打印错误)

c++ - 尽管有虚假共享,但速度提高了

c# - 如何获取调用方方法名称?

iPhone 加速框架 FFT 与 Matlab FFT

c++ - 如何判断c++ vector中的值类型(int或double)?

image - 从图像制作 gif

c++ - 方括号数组

c++ - 在 x 时间后结束循环的最低性能密集方式

c++ - MFC:如何将自定义控件包含到 Visual Studio 的工具箱中

visual-studio - 由于循环依赖错误,无法添加对项目的引用