使用`Eigen :: Matrix`创建`alglib :: integer_1d_array`

时间:2018-06-09 18:47:04

标签: c++ eigen eigen3 alglib

我不断收到错误error: no matching function for call to 'alglib::integer_1d_array::setcontent(int, Eigen::PlainObjectBase<Eigen::Matrix<int, 3, 1> >::Scalar*)'

出于某种原因,alglib::integer_1d_array不希望以与alglib::real_1d_array相同的方式进行实例化。

例如,在具有模板参数size_t num和参数Eigen::Matrix<double,num,num> A的函数模板中,这可以工作:

Eigen::Matrix<double,num,num,Eigen::RowMajor> twice_A_rm(A);
real_2d_array a;
a.setcontent(num, num, twice_A_rm.data());

但是,一旦我更改为整数数组,它就无法工作:

Eigen::Matrix<int,num+1,1> ctEig = Eigen::Matrix<int,num+1,1>::Constant(1.0); // positive for >=
integer_1d_array ct;
ct.setlength(num+1);
ct.setcontent(num+1, ctEig.data());

我也可以在最后一行用num+1替换static_cast<int>(num+1),但它仍然无法正常工作。我做错了什么?

1 个答案:

答案 0 :(得分:2)

简要浏览alglib的来源,默认情况下integer_1d_array似乎有ptrdiff_t类型的数据,即如果您将int替换为{{1},则代码应该有效在你声明/初始化ptrdiff_t的行中:

ctEig