3

我不断收到错误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+1static_cast<int>(num+1),它仍然不起作用。我究竟做错了什么?

4

1 回答 1

3

简要浏览 alglib 的源代码,默认情况下似乎integer_1d_array有数据类型ptrdiff_t,即,如果您在声明/初始化的行中替换int为,您的代码应该可以工作:ptrdiff_tctEig

Eigen::Matrix<ptrdiff_t,num+1,1> ctEig = Eigen::Matrix<ptrdiff_t,num+1,1>::Constant(1);
integer_1d_array ct;
ct.setlength(num+1); // <-- I assume this line is redundant
ct.setcontent(num+1, ctEig.data());
于 2018-06-10T01:04:39.120 回答