我定义了犰狳矩阵,并尝试根据其手册通过初始化程序列表对其进行初始化。
除非我尝试定义列矩阵,否则都很好。
为什么模棱两可?
#include <armadillo>
int main()
{
// ok : square matrix
arma::mat A={{1.0,2.0},{3.0,4.5}};
// ok: row matrix
arma::mat B={3.5,4.0};
// error: conversion from ‘<brace-enclosed initializer list>’ to
// ‘arma::mat {aka arma::Mat<double>}’ is ambiguous
arma::mat C={{3.5},{4.0}};
// ok: column matrix
arma::mat D=arma::mat({3.5,4.0}).t();
return 0;
}
C ++ 11/14标准存在问题。由于每个内部集中只有一个元素,因此该标准从本质上说{{3.5},{4.0}}
也可以解释为{3.5,4.0}
。换句话说,{3.5}
可以隐式转换为double(3.5)
。这导致两个构造函数之间的歧义。
一种可能的解决方案是使用Armadillo列向量构造函数:
arma::mat C = arma::colvec( {3.5, 4.0} );
本文收集自互联网,转载请注明来源。
如有侵权,请联系[email protected] 删除。
我来说两句