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();
}
}