C++ 值在通过引用传递时不更改 类矩阵{ 私人: 双数据[行*列]; 公众: 矩阵(向量&,向量&); 空加(常数矩阵&); 无效mult(双); 双道(); 双范数(); 作废打印(); }; void矩阵::print(){ cout.setf(ios::showpoint | ios::fixed); 计算精度(3); 对于(int i=0;i

C++ 值在通过引用传递时不更改 类矩阵{ 私人: 双数据[行*列]; 公众: 矩阵(向量&,向量&); 空加(常数矩阵&); 无效mult(双); 双道(); 双范数(); 作废打印(); }; void矩阵::print(){ cout.setf(ios::showpoint | ios::fixed); 计算精度(3); 对于(int i=0;i,c++,matrix,C++,Matrix,如果希望A或B在If块之外可见,则必须以更大的范围声明它们。如果已在更大的范围声明它们,则在If块中隐藏这些名称,并使用一个本地对象,该对象将在该块之后消失,离开outer对象未更改。您是否尝试过调试(设置要添加的断点)?此外,如果您提供一个简短、自包含、正确(可编译)的示例()这就说明了问题所在。您的代码至少缺少矩阵类型定义。Add函数看起来不错。您可以显示上面使用的矩阵头文件吗?以及Ctor吗?因为您在添加它们之前立即定义了这两个矩阵,所以我想了解它们的初始化内容。您所显示的内容中没有任何问

如果希望
A
B
If
块之外可见,则必须以更大的范围声明它们。如果已在更大的范围声明它们,则在
If
块中隐藏这些名称,并使用一个本地对象,该对象将在该块之后消失,离开outer对象未更改。

您是否尝试过调试(设置要添加的断点)?此外,如果您提供一个简短、自包含、正确(可编译)的示例()这就说明了问题所在。您的代码至少缺少矩阵类型定义。Add函数看起来不错。您可以显示上面使用的矩阵头文件吗?以及Ctor吗?因为您在添加它们之前立即定义了这两个矩阵,所以我想了解它们的初始化内容。您所显示的内容中没有任何问题m、 此时,我们所能说的就是在添加之前和之后打印出
A
B
。另一种可能是
行或
为零。A.print()正确地给出矩阵a+矩阵b的正确值。但是,一旦“选项3”退出,我再次尝试打印矩阵a,它将恢复为最初输入的值,这是因为它是该
if
块的局部值。
class Matrix {
    private:
        double data[rows*columns];
    public:
        Matrix(Vector&, Vector&);
        void add(const Matrix&);
        void mult(double);
        double trace();
        double norm();
        void print();
};



void Matrix::print() {
    cout.setf(ios::showpoint|ios::fixed);
    cout.precision(3);
    for (int i = 0; i < rows; i++) {
        for (int j = 0; j < columns; j++) {
            cout << setw(2) << setfill('0') << data[i * rows + j] << " ";
        }
        cout << endl;
        }
  }

void Matrix::add(const Matrix &m){
    for(int i=0;i<rows*columns;i++){
            data[i]+=m.data[i];

    }

}

menu () {
//...
   else if (choice==3){
        cout<<"A+B="<<endl;
        Matrix A(a,b);
        Matrix B(c,d);
        A.add(B);
        A.print();


    }
}