我试图声明用于在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)'的无效重新定义
答案 0 :(得分:0)
您缺少模板类型T。
class Matrix
{
public:
template <class T> // this is what you are missing
Matrix(int sizeX, int sizeY, T initValue = T());
...
请注意,模板代码实现应在头文件中,而不在cpp中。