我尝试编写一个函数,该函数将ColXpr值用作输入:
typedef Eigen::Array<float, Eigen::Dynamic, Eigen::Dynamic> Signal2D;
void Threshold(Signal2D::ColXpr& params)
{
params = (params >= 0.0f).template cast<float>();
}
当我尝试调用此函数时,我会执行以下操作:
Signal2D arr;
// fill it with stuff
Threshold(arr.col(0));
然后我得到这个编译器错误:
src/core/Neuron.h:91:14: note: no known conversion for argument 1 from ‘Eigen::DenseBase<Eigen::Array<float, -1, -1> >::ColXpr {aka Eigen::Block<Eigen::Array<float, -1, -1>, -1, 1, true>}’ to ‘Eigen::DenseBase<Eigen::Array<float, -1, -1> >::ColXpr& {aka Eigen::Block<Eigen::Array<float, -1, -1>, -1, 1, true>&}’
make: *** [src/training/Fibonacci.o] Error 1
如果不重新发布导致该问题的整个代码系列,那么有人可以解释一下当编译器说没有已知的从Value到Value&参数的转换时的含义吗?为什么在这种情况下无法获得参考?请注意,我已经在此处发布了与此this指针相关的类似问题:
error: no match for ‘operator<<‘ using boost::serialisation
这可能是GCC 4.9.0的某些特性,还是我在这里做错了?如果您需要查看一个独立的示例,请让我知道,这需要花一些时间才能凑齐,我认为这里可能有足够的信息来指出我的明显错误.
解决方法:
在C中,临时对象无法绑定到非常量引用.
我假设arr.col(0)按值返回一个对象.返回的值是一个临时对象.这意味着它不能匹配类型为T&的参数.
一种解决方案:
auto temp = arr.col(0);
Threshold(temp);
我想知道您是否打算让arr.col()返回引用?
标签:c,eigen 来源: https://codeday.me/bug/20191012/1898877.html
本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享; 2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关; 3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关; 4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除; 5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。