0
在我的代碼定義了一個模板類與定義如下的operator()
:Eigen沒有用於調用.dot()的匹配函數?
template<class Integrator, int ORDER>
inline double operator() (FiniteElement<Integrator, ORDER,2,3>& currentfe_,
int i, int j, int iq, int ic = 0)
{
Real s = 0;
Eigen::Matrix<double,2,1> grad_phi_i;
Eigen::Matrix<double,2,1> grad_phi_j;
grad_phi_i(0) = ...
grad_phi_i(1) = ...
grad_phi_j(0) = ...
grad_phi_j(1) = ...
s = grad_phi_i.dot(currentfe_.metric().dot(grad_phi_j));
return s;
}
凡
currentfe_.metric()
是FiniteElement
類的方法返回一個Eigen::Matrix<double,2,2>
。
我得到的錯誤是:
error: no matching function for call to ‘Eigen::Matrix<double, 2, 1>::dot(Eigen::internal::scalar_product_traits<double, double>::ReturnType)’
s = grad_phi_i.dot(currentfe_.metric().dot(grad_phi_j));
而且我想不通爲什麼。
確切地說,它確實有一個'.DOT()'方法但這只是爲兩個向量之間的標量積,並返回類型因此是標量。 – ggael
@ggael是對的。我將編輯答案以澄清這一點並提供參考。 – nickerx