首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用` `Eigen::Matrix`创建`alglib::integer_1d_array`

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

Stack Overflow用户
提问于 2018-06-10 02:47:04
回答 1查看 317关注 0票数 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的函数模板中,这是有效的:

代码语言:javascript
复制
Eigen::Matrix<double,num,num,Eigen::RowMajor> twice_A_rm(A);
real_2d_array a;
a.setcontent(num, num, twice_A_rm.data());

但是,一旦我切换到整数数组,它就不起作用了:

代码语言:javascript
复制
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());

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

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-10 09:04:39

浏览一下integer_1d_array的源代码,默认情况下,ptrdiff_t的数据类型似乎是int,也就是说,如果在声明/初始化ptrdiff_t行中将ctEig替换为ptrdiff_t,那么您的代码应该可以工作

代码语言:javascript
复制
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());
票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50777483

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档