我正在使用C ++中的Visual Studio 2015构建DLL。
DLL的Visual Studio项目引用.NET程序集。 (项目中的一个文件是C ++ / CLI文件。) 这个.NET程序集由第三方提供,它们提供了新版本的程序集。
使用旧版本的程序集构建项目工作正常,但是当我使用新版本的程序集构建时,我收到以下错误:
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(24): error C2869: 'std::errc': has already been defined to be a namespace
C:\Program Files (x86)\Microsoft Visual Studio 14.0\VC\include\system_error(109): error C2869: 'std::io_errc': has already been defined to be a namespace
使用ildasm查看程序集的旧版本和新版本我可以看到新程序集在命名空间errc
中定义了枚举std::errc
,而旧程序集在命名空间{{}中定义了枚举errc 1}}。 io_errc也有类似的差异。
构建过程似乎在尝试编译std
之前读取引用的程序集,从而导致上述错误。我可以做些什么来协调新的程序集与Visual Studio 2015?
答案 0 :(得分:0)
此问题的解决方法是在包含STL标头之前将#define
违规项目改为其他内容。
#define errc Errc
#define io_errc Io_errc
#include <system_error>