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
Нет идеи, что не так. Пожалуйста помоги.
Вам необходимо предоставить определение для этой специализации класса. Например:
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>
содержит ли специализированная версия Matrix<T, 2>
метод Determinant
.
Это возможный дубликат функции члена частичной специализации c++
Как уже упоминалось, вы не специализируетесь на методах, а на самом классе.