частичная специализация шаблона

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

Нет идеи, что не так. Пожалуйста помоги.

Показать ещё 1 комментарий
Теги:
templates

2 ответа

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> содержит ли специализированная версия Matrix<T, 2> метод Determinant.

0

Это возможный дубликат функции члена частичной специализации c++

Как уже упоминалось, вы не специализируетесь на методах, а на самом классе.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню