Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/cplusplus/148.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C++ 模板部分专业化 模板 类矩阵 { 公众: 行列式(空)常数; tm[D][D]; }; 模板 T矩阵::行列式(空)常数 { 返回m[0][0]*m[1][1]-m[1][0]*m[0][1]; }_C++_Templates - Fatal编程技术网

C++ 模板部分专业化 模板 类矩阵 { 公众: 行列式(空)常数; tm[D][D]; }; 模板 T矩阵::行列式(空)常数 { 返回m[0][0]*m[1][1]-m[1][0]*m[0][1]; }

C++ 模板部分专业化 模板 类矩阵 { 公众: 行列式(空)常数; tm[D][D]; }; 模板 T矩阵::行列式(空)常数 { 返回m[0][0]*m[1][1]-m[1][0]*m[0][1]; },c++,templates,C++,Templates,你好,论坛。 我有这个代码,但我得到错误: 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]

你好,论坛。 我有这个代码,但我得到错误:

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):错误C3860:类模板名称后面的模板参数列表必须按照模板参数列表中使用的顺序列出参数
1> c:\dropbox\projects\math\matrix.h(319):错误C2976:'math::matrix':模板参数太少

不知道怎么了。请提供帮助。

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

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
模板
类矩阵
{
公众:
行列式(空)常数;
tm[D][D];
};
模板
类矩阵
{
tm[2][2];
公众:
行列式(空)常数;
};
模板
T矩阵::行列式(空)常数
{
返回m[0][0]*m[1][1]-m[1][0]*m[0][1];
}

否则,编译器将无法判断
矩阵
的专用版本是否包含
行列式
方法。

这可能是


如前所述,您不能专门化方法,而只能专门化类本身。

我相信您只能专门化整个类,而不能专门化单个函数。您可以做的可能重复的事情是将
行列式
设为非成员(可能是朋友)并重载它。
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];
}