new*_*ost 5 c++ initializer-list armadillo c++11
我在Windows 10下使用MSVC2013 64位编译器.
根据:
std::cout << arma::arma_version::as_string() << std::endl;
Run Code Online (Sandbox Code Playgroud)
我有Armadillio库的6.100.1版(Midnight Blue).
例如,我启用了C++ 11
auto il = { 10, 20, 30 };
for(auto ele : il)
cout<<ele<<endl;
Run Code Online (Sandbox Code Playgroud)
工作中.还正确添加了库,运行以下代码:
vec v;
v<<10<<20<<30;
cout<<v;
Run Code Online (Sandbox Code Playgroud)
但是尝试使用Armadillio的初始化列表失败了.
vec v = { 1.0, 2.0, 3.0 };
Run Code Online (Sandbox Code Playgroud)
导致编译错误:
错误:C2440:'初始化':无法从'initializer-list'转换为'arma :: Col'没有构造函数可以采用源类型,或者构造函数重载解析是模糊的
在文件夹armadillo-6.100.1\include\armadillo_bits 中 有一个名为config.hpp的配置文件。
在那里你会发现一段话:
#if !defined(ARMA_USE_CXX11)
// #define ARMA_USE_CXX11
//// Uncomment the above line to forcefully enable use of C++11 features (eg. initialiser lists).
//// Note that ARMA_USE_CXX11 is automatically enabled when a C++11 compiler is detected.
#endif
Run Code Online (Sandbox Code Playgroud)
因此,看起来 MSVC2013 64 位没有被检测为 Armadillio 的 C++11 编译器。所以取消注释该行
// #define ARMA_USE_CXX11
Run Code Online (Sandbox Code Playgroud)
解决了我的问题。现在这就像魅力一样起作用:
vec v = { 1.0, 2.0, 3.0 };
cout<<v;
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1544 次 |
| 最近记录: |