создание `alglib :: integer_1d_array` с помощью` Eigen :: Matrix` - PullRequest
0 голосов
/ 09 июня 2018

Я получаю сообщение об ошибке 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 голосов
/ 10 июня 2018

Кратко просматривая источник 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());
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...