Windows Visual Studio 2015、C++11 标准和 Armadillo 库
Posted
技术标签:
【中文标题】Windows Visual Studio 2015、C++11 标准和 Armadillo 库【英文标题】:windows visual studio 2015, C++11 standard, and Armadillo library 【发布时间】:2016-03-06 23:36:18 【问题描述】:我有一个使用 Armadillo 线性代数库(版本 6.500.5 稳定版)的 Visual Studio Community 2015 项目(x64 解决方案平台),如果我尝试使用引入 C++11 的语法,则会收到构建错误。文档指出“使用 C++11 标准时,Mat、Col、Row 中的元素可以通过初始化列表设置”。例如,如果我直接从犰狳文档describing element initialization 中举个例子,
// C++11
mat A = 1, 3, 5,
2, 4, 6 ;
VS2015产生错误,
Error C2440 'initializing': cannot convert from 'initializer list' to 'arma::Mat<double>'
相比之下,C++98 示例编译没有错误:
// C++98
mat A;
A << 1 << 3 << 5 << endr
<< 2 << 4 << 6 << endr;
这当然让我怀疑 C++11 的兼容性是无效的,但是在无数的 Visual Studio 项目属性中,我找不到任何与此类选项有关的任何内容,并且其他地方的网络搜索结果似乎表明 C++从 2012 年起,Visual Studio 版本中存在 11 兼容性。使用 Armadillo 没有其他问题,并且在 Linux (gcc 4.9.3) 下测试 C++11 代码确实工作正常。有没有人对此有任何见解,或者知道 VS2015 是否有一些隐藏的 C++11 开关?
【问题讨论】:
【参考方案1】:VS2015 中的 C++11 支持不完整。您可以通过在包含犰狳标头之前定义 ARMA_USE_CXX11 来强制告诉犰狳使用 C++11 功能:
#define ARMA_USE_CXX11
#include <armadillo>
(旁注:最新版本的 gcc 和 clang 是 C++11/C++14 更好的选择;您可以从 MinGW 项目获得 gcc for windows)。
【讨论】:
解决了! ...感谢您的快速响应。干杯//罗尔夫以上是关于Windows Visual Studio 2015、C++11 标准和 Armadillo 库的主要内容,如果未能解决你的问题,请参考以下文章
Visual Studio 远程调试 - MSVCP140.dll 丢失
Visual Studio2015 Nuget安装OpencvSharp包