好的,我正在尝试编写一个构建2D矩阵的模板,我想要>>和<<正常工作,这是我到目前为止的代码,但我迷路了。我有函数输入和输出来通过填写模板来运行用户,所以我希望能够cin和cout模板。
#include <iostream>
#include <cstdlib>
using namespace std;
template <typename T >
class Matrix
{
friend ostream &operator<<(ostream& os,const Matrix& mat);
friend istream &operator>>(istream& is,const Matrix& mat);
private:
int R; // row
int C; // column
T *m; // pointer to T
public:
T &operator()(int r, int c){ return m[r+c*R];}
T &operator()(T a){for(int x=0;x<a.R;x++){
for(int z=0;z<a.C;z++){
m(x,z)=a(x,z);
}
}
}
~Matrix();
Matrix(int R0, int C0){ R=R0; C=C0; m=new T[R*C]; }
void input(){
int temp;
for(int x=0;x<m.R;x++){
for(int y=0;y<m.C;y++){
cout<<x<<","<<y<<"- ";
cin>>temp;
m(x,y)=temp;
}
}
}
};
// istream &operator>>(istream& is,const Matrix& mat){
// is>>mat
// };
ostream &operator<<(ostream& os,const Matrix& mat){
for(int x=0;x<mat.R;x++){
for(int y=0;y<mat.C;y++){
cout<<"("<<x<<","<<y<<")"<<"="<<mat.operator ()(x,y);
}
}
};
int main()
{
Matrix<double> a(3,3);
a.input();
Matrix<double> b(a);
cout<<b;
cout << a(1,1);
}
答案 0 :(得分:0)
以下是我在代码中发现的所有问题。让我们从头开始:
错误的函数返回类型和this
分配
T operator>>(int c)
{
this = c;
}
为什么这段代码错了?我注意到的第一件事是你的函数正在返回T
但你在块中没有返回语句。忘记我在评论中所说的内容,你的插入/运算操作符应该返回*this
。因此,您的返回类型应为Maxtrix&
。
我在此代码段中看到的另一个错误是您正在分配this
指针。这不应该为你编译。相反,如果您打算更改某个数据成员(最好是您的C
数据成员),它应该是这样的:
this->C = c;
反过来,这就是你的功能应该是这样的:
Matrix& operator>>(int c)
{
this->C = c;
return *this;
}
<强> this->(z, x)
强>
在output
函数的内部for循环中,您执行了此操作:
cout << "(" << z << "," << x << ")" << "=" << this->(z, x) << endl;
this->(z, x)
没有按你的想法行事。它不会同时访问矩阵的两个数据成员。由于语法无效,它实际上会导致错误。您必须单独访问数据成员,如下所示:
... << this->z << this->x << endl;
此外,此output
函数不需要返回类型。只需将其void
。
请注意,您的input
功能存在同样的问题。