Eigen的unsupported/CXX11/Tensor模块编译错误

3

我的项目使用的是Eigen-3.3-beta。我可以在包含<Eigen/Core>的Visual Studio 2015 Community中构建我的项目。但是,当我包含<unsupported\Eigen\CXX11\Tensor>后,我遇到了一些奇怪的编译错误,例如:

1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\minwinbase.h(46): error C3646: 'nLength': unknown override specifier
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\minwinbase.h(46): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\minwinbase.h(47): error C3646: 'lpSecurityDescriptor': unknown override specifier
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\minwinbase.h(47): error C4430: missing type specifier - int assumed. Note: C++ does not support default-int
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\minwinbase.h(48): error C3646: 'bInheritHandle': unknown override specifier
......
1>C:\Program Files (x86)\Windows Kits\8.1\Include\um\minwinbase.h(295): fatal error C1003: error count exceeds 100; stopping compilation

看起来我的项目在 Eigen-3.3-beta 的正常部分下工作良好,但是在 unsupported module 中出现了问题。此外,包含 unsupported module 后,由 GLEW 引入的类型(例如 GLfloat)无法解析。我做错了什么吗?

1个回答

2
似乎这源自于在<unsupported\Eigen\CXX11\Tensor>中包含了<winbase.h>
我通过参考这篇帖子(Compile error in 'winbase.h')解决了这个问题,只需要将<unsupported\Eigen\CXX11\Tensor>中第38行的#include <winbase.h>替换为#include <windows.h>
编辑:这似乎是存储库中最新版本的修复方式。

感谢您报告这个问题。我们最近只为Windows添加了回归测试,所以我们没有及时发现这个问题在3.3beta版本中。这个问题已经被修复,并将成为下一个版本的一部分。 - Benoit Steiner

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接