看看怎么了?当我调试并运行代码时,它没有显示任何错误,但是在运行代码时,它不执行加法命令。 单击此链接https://code.sololearn.com/cjji38CaEHBd以查看完整的代码并进行编辑。以下代码用于添加矩阵,我对此表示怀疑。正确吗?
int Matrix::add()
{
Matrix s1;
int i, j=0;
s1.getmatrix();
cout << "Addition of Matrix A & B is";
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
C[i][j] = A[i][j] + B[i][j];
}
cout << "\n";
}
for (i = 0; i < r; i++)
{
for (j = 0; j < c; j++)
{
cout <<" "<<C[i][j];
}
}
return 0;
}
答案 0 :(得分:1)
该程序的设计相当混乱,但是我终于能够在以下输入中使用它:
5
2 2
1 2 3 4
1 2 3 4
确保您了解类实例的概念。主要问题在于,您在Matrix s1
方法中声明了main()
,调用了s1.add()
,然后在实现Matrix::add()
的过程中,创建了另一个Matrix s1
并然后尝试从s1
引用原始的main()
,在这里您要检索r
,c
,A
和{{1 }}。简便的解决方法是将B
中对r
,c
,A
和B
的引用替换为Matrix::add()
,{{ 1}},s1.r
,s1.c
-没有。表示法,您将隐式获得s1.A
,s1.B
,this->r
和this->c
,它们不会通过调用this->A
来初始化。
为避免将来出现此类混乱,我可能会设计您的程序,以使您无条件获取一些输入矩阵this->B
和Matrix::getmatrix()
,然后在A
中添加THOSE,返回结果矩阵(B
)而不创建新实例。同样,将变量命名为不同的东西可能会使此错误更容易找到-在Matrix::add()
中的int[][]
以及指向不同对象的Matrix s1
都相当混乱。
我为修复程序修改了尽可能少的代码。最终的实现是这样的:
main()
tl; dr这是一个可能的修复程序,但并未解决该程序中心的严重设计问题的核心。
希望这会有所帮助!
答案 1 :(得分:0)
您不能直接使用A,B,C,r,c变量。它们是类变量,必须与矩阵s1一起使用。
int Matrix::add()
{
Matrix s1;
int i, j=0;
s1.getmatrix();
cout << "Addition of Matrix A & B is";
for (i = 0; i < s1.r; i++)
{
for (j = 0; j < s1.c; j++)
{
s1.C[i][j] = s1.A[i][j] + s1.B[i][j];
}
cout << "\n";
}
for (i = 0; i < s1.r; i++)
{
for (j = 0; j < s1.c; j++)
{
cout <<" "<<s1.C[i][j];
}
}
return 0;
}