正确的模板声明和实现

时间:2019-07-28 11:40:35

标签: c++ class templates

我试图声明用于在C ++中实现二维矩阵的模板声明。我以前从未使用过模板,因此被要求使用它们。我只需要使用正确的声明语法就可以了,因为朋友功能和模板的重载令人困惑,并且存在不同的问题,至少与我习惯的相比。

内部文档照常没有用。我最专注于找出重载运算符的错误,因为老实说,它使我困惑了至少一整天。

class Matrix
{
      public:
      Matrix(int sizeX, int sizeY, T initValue = T());


      T &operator()(int x, int y);

     template <class Type>
     friend ostream &operator<<(ostream &out, const Matrix<type> &m);

      template <class Mtype>
     friend Matrix<Mtype> operator+(const Matrix<MType> &m1, const Matrix<Mtype>& m2);

    private:
   vector< vector<T> > data;
   int dx, dy;
}
#ifndef MATRIX_CPP
Template <class T>
Matrix<T>::Matrix(int sizeX, int sizeY, T initValue){
dx = sizeX;
dy = sizeY;
initvalue = T(sizeX, sizeY);
}

T& operator()(int x, int y){
return T[x][y];
}

错误类型名'T'没有命名类型

'Matrix :: Matrix(int int,T)'的无效重新定义

1 个答案:

答案 0 :(得分:0)

您缺少模板类型T。

 class Matrix
{
      public:
      template <class T>         // this is what you are missing
      Matrix(int sizeX, int sizeY, T initValue = T());
...

请注意,模板代码实现应在头文件中,而不在cpp中。