无法确定“不匹配”操作符的原因编译错误
问题描述:
我使用的是矢量信号图像处理库(vsipl++)的CodeSourcery的implementation。我已经编写了应该返回的函数[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 ++矩阵中接受两个参数:一个类型和一个描述信息存储方式的块。以上是模块汤的原因。此外,lud对象在矩阵A上执行LU分解,然后使用A的分解形式求解Ax = b。
当我尝试使用gcc(MacO 10.6和4.3上的4.2.1) 0.0在Fedora 9)得到以下错误
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
的,需要单个数据和块类型简化了代码,我也得到了同样的错误。
有什么想法?
谢谢。我记得在某个时候读到这一点,但我从来没有想到这是问题所在。而且,是的,它也让我疯狂。 – rcollyer 2010-09-24 12:35:11