我正在编译一个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/