我正在编译Matlab mex文件(在Windows下使用VS2010),以下2包括:
#include <algorithm> // for std::copy
#include "mex.h"
给我编译错误:
1&gt; d:\ svn \ trunk \ dev \ matlab \ extern \ include \ matrix.h(337):错误C2371: 'char16_t':重新定义;不同的基本类型
我尝试将其放在命名空间中:
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
我该如何解决这个问题?
答案 0 :(得分:1)
在命名空间中放置一个标准的标题并不是一个好主意,即使你没有使用那里的任何方法或类,另一个标题很可能(如mex.h) 。将名称空间放在mex标题周围似乎不太可能产生冲突。
在另一个之前还包括一个标题也可以防止这种冲突。有些标题考虑到在重新定义它们之前可能已经定义了某些符号(库开发人员真的应该注意这样做)
在某些情况下,阅读标题也可能会让您了解正在发生的事情。有时它可能就像定义符号一样简单,它告诉标题跳过重新定义。