2013-10-27 109 views
0
template <typename T, unsigned D> 
class Matrix 
{ 
public: 
    T Determinant(void) const; 

    T m[D][D]; 
}; 


template <typename T> 
T Matrix<T, 2>::Determinant(void) const 
{ 
    return m[0][0] * m[1][1] - m[1][0] * m[0][1]; 
} 

你好,论坛。 我有这个代码,但我得到的错误:模板部分特化

1>c:\dropbox\projects\math\matrix.h(319): error C3860: template argument list following class template name must list parameters in the order used in template parameter list 
1>c:\dropbox\projects\math\matrix.h(319): error C2976: 'Math::Matrix<T,D>' : too few template arguments 

不知道什么是错的。请帮忙。

+0

我相信你只能专门研究整个班级,而不是个人功能。 – Adam

+0

[“部分模板特化”中的“不完整类型的无效使用”错误的可能的重复](http://stackoverflow.com/questions/165101/invalid-use-of-incomplete-type-error-with-partial-template-specialization ) –

+0

你可以做的是使'决定因素'非会员(可能是朋友)和*超载*它。 –

回答

2

您需要提供该类专业化的定义。例如:

template <typename T, unsigned D> 
class Matrix 
{ 
public: 
    T Determinant(void) const; 

    T m[D][D]; 
}; 

template <typename T> 
class Matrix <T, 2> 
{ 
    T m[2][2];  

public: 
    T Determinant (void) const; 
}; 

template <typename T> 
T Matrix<T, 2>::Determinant (void) const 
{ 
    return m[0][0] * m[1][1] - m[1][0] * m[0][1]; 
} 

不这样做,编译器将无法分辨的Matrix<T, 2>专业版包含一个Determinant方法。