gpt4 book ai didi

c++ - unable to determine cause of "no match for ' operator <'"编译错误

转载 作者:太空狗 更新时间:2023-10-29 21:29:56 25 4
gpt4 key购买 nike

我正在使用 CodeSourcery 的 implementation vector 信号图像处理库 ( vsipl++ )。我写了一个函数,应该返回[I + a*A]^-1 B,其中I是单位矩阵,A和B是相容方阵,如下:

namespace vsipl {

template< class T1, class T2, class O1, class O2, class L1, class L2,
template< dimension_type, class, class, class > class B1,
template< dimension_type, class, class, class > class B2 >
Matrix< typename Promotion< T1, T2 >::type,
B1< 2, typename Promotion< T1, T2 >::type, O1, L1 > >
inv_mult( typename Promotion< T1, T2 >::type a,
Matrix< T1, B1< 2, T1, O1, L1 > > const& A,
Matrix< T2, B2< 2, T2, O2, L2 > > const& B
)
{
typedef typename Promotion< T1, T2 >::type value_type;
typedef Matrix< value_type, B1< 2, value_type, O1, L1 > > ret_type;
typedef lud< value_type, by_reference > lud_type;

ret_type ret(A.size(0),A.size(1),0), denom(A.size(0),A.size(1),0);

//I + a*A
denom.diag() = 1;
denom = denom + a*A;

lud_type ld( denom.size() );
ld.decompose( denom );

//as a side effect of using LAPACK as a back end, this requires a template
//param to indicate precisely what is being solved.
ld.solve< mat_ntrans >( B, ret ); // <--- Line generating error.

return ret;
}//inv_mult
}//vsipl

需要说明的是,在 vsipl++ 中,矩阵接受两个参数:一个类型和一个描述信息存储方式的 block 。该 block 是上面模板汤的原因。此外,lud 对象对矩阵 A 执行 LU 分解,然后使用 A 的分解形式求解 Ax = b。

当我尝试使用 gcc(MacOs 10.6 上的 4.2.1 和 Fedora 9 上的 4.3.0)编译它时,出现以下错误

error: no match for 'operator<' in 'ld.vsip::lud<T, by_reference>::solve [with 
vsip::mat_op_type tr = tr, Block0 = Block0, Block1 = Block1, T = double] < mat_ntrans

我尝试通过消除 Promotion 类型来简化代码,需要单一数据和 block 类型,但我遇到了同样的错误。

有什么想法吗?

最佳答案

尝试

ld.template solve< mat_ntrans >

explanation , 因为同样的事情让我抓狂

关于c++ - unable to determine cause of "no match for ' operator <'"编译错误,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3784035/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com