【发布时间】:2016-06-08 15:08:33
【问题描述】:
我正在研究矩阵的乘法 有点像
m5 = m2 * m3;
cout << "m2 * m3 is : " << endl<< m5 << endl;
这是我的代码
const Matrix Matrix::operator*(const Matrix &a)
{
Matrix temp(a.row,a.col);
for (int i = 0; i<row; i++)
{
for (int j = 0; j<col; j++)
{
for (int k = 0; k<a.row; k++)
{
temp.data[i][j] = temp.data[i][j] + data[i][k] * a.data[k][j];
}
}
}
return temp;
}
但是,我的打印功能总是显示错误
ostream& operator<<(ostream &output, const Matrix &a)
{
for (int i = 0; i < a.row; i++)
{
for (int j = 0; j < a.col; j++)
{
output << a.data[i][j] << "\t";
}
output << "" << endl;
}
return output;
}
似乎 a.data[i][j] 有问题,我不知道是什么问题 添加时效果很好。 它显示错误 {data0x005fba90{0xfeeefeee{???}} 任何人都可以就这种情况提供任何建议或建议或帮助 这是我的复制构造函数
Matrix::Matrix(const Matrix&m2)
{
row = m2.row;
col = m2.col;
setUp(row, col);
for (int i = 0; i<row; i++)
{
for (int j = 0; j<col; j++)
{
data[i][j] = 0;
}
}
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
data[i][j] = m2.data[i][j];
}
}
}
这是设置和默认设置
Matrix::Matrix()
{
row =0;
col = 0;
for (int i = 0; i<row; i++)
{
for (int j = 0; j<col; j++)
{
data[i][j] = 0;
}
}
}
Matrix::Matrix(int a, int b, double d[], int c)
{
row = a;
col = b;
setUp(row, col);
int counter = 0;
for (int i = 0; i < row; i++)
{
for (int j = 0; j < col; j++)
{
data[i][j] = d[counter];
counter++;
}
}
}
和设置
void Matrix::setUp(int a, int b)
{
row = a;
col = b;
data = new double*[row];
for (int i = 0; i < row; i++) data[i] = new double[col];
}
【问题讨论】:
-
但是,我的打印功能总是显示一个错误你能详细说明一下吗?
-
临时矩阵不应该有
this->row和a.col维度吗? -
但是如果我没有使用任何运算符并且它确实有效,那么使用运算符和不使用运算符有什么区别
-
在您的复制构造函数中,第一组循环是无用的,因为之后您将直接覆盖数据。此外,我们仍然需要查看类定义以及采用行和列参数的构造函数,可能还有
setUp函数。请尝试创建Minimal, Complete, and Verifiable Example 并展示给我们。