2010-09-24 30 views
3

我使用的是矢量信號圖像處理庫(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的,需要單個數據和塊類型簡化了代碼,我也得到了同樣的錯誤。

有什麼想法?

回答

3

嘗試

ld.template solve<mat_ntrans> 

explanation,因爲同樣的事情,讓我瘋狂

+0

謝謝。我記得在某個時候讀到這一點,但我從來沒有想到這是問題所在。而且,是的,它也讓我瘋狂。 – rcollyer 2010-09-24 12:35:11

相關問題