Я получаю ошибку 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)
в последней строке, и это все еще не работает. Что я делаю неправильно?
Кратко просматривая источник alglib, кажется, integer_1d_array
имеет данные типа ptrdiff_t
по умолчанию, т. е. ваш код должен работать, если вы замените int
от ptrdiff_t
в строке, которую вы объявляете / инициализируете ctEig
:
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());
Других решений пока нет …