因此,我决定重新启动我的程序,除了+运算符现在可以正常工作。我收到读取访问冲突异常
头文件
#pragma once
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
class MatrixType
{
private:
int **matrix;
int row;
int col;
public:
void setElement(int r, int c, int newvalue);
void display();
const MatrixType& operator=(const MatrixType& mat);
MatrixType operator+(const MatrixType& mat) const;
friend std::ostream & operator << (std::ostream & out, const MatrixType & mat);
MatrixType(int r, int c);
MatrixType(string fileName);
MatrixType(const MatrixType& mat);
MatrixType();
~MatrixType();
};
实施文件
#include "matrixType.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
void MatrixType::setElement(int r, int c, int newvalue)
{
matrix[r][c] = newvalue;
}
void MatrixType::display()
{
for (int i = 0; i < row; i++)
{
for (int r = 0; r < col; r++)
cout << matrix[i][r] << " ";
cout << endl;
}
cout << endl;
}
const MatrixType& MatrixType::operator=(const MatrixType& mat)
{
if (row != mat.row)
{
cout << "The matrixes are not identical" << endl;
return *this;
}
for (int i = 0; i < row; i++)
{
for (int r = 0; r < col; r++)
{
matrix[i][r] = mat.matrix[i][r];
}
}
return *this;
}
MatrixType MatrixType::operator+(const MatrixType& mat) const
{
MatrixType tempMatrix;
if (row != mat.row)
{
cout << "The matrixes are not identical can not be added together" << endl;
return *this;
}
else
{
for (int i = 0; i < mat.row; i++)
{
for (int r = 0; r < mat.col; r++)
{
tempMatrix.matrix[i][r] = mat.matrix[i][r] + matrix[i][r];
}
}
return tempMatrix;
}
}
std::ostream & operator << (std::ostream & out, const MatrixType & mat)
{
for (int i = 0; i < mat.row; i++) {
for (int j = 0; j < mat.col; j++) {
out << mat.matrix[i][j] << " ";
}
out << std::endl;
}
return out;
}
MatrixType::MatrixType(int r, int c)
{
matrix = new int*[r];
for (int i = 0; i < r; i++)
{
matrix[i] = new int[c];
}
row = r;
col = c;
for (int i = 0; i < row; i++)
{
for (int s = 0; s < col; s++)
{
matrix[i][s] = 0;
}
}
}
MatrixType::MatrixType(string fileName)
{
int r;
int c;
int z;
ifstream myFile;
myFile.open(fileName);
myFile >> r;
myFile >> c;
matrix = new int*[r];
for (int i = 0; i < r; i++)
{
matrix[i] = new int[c];
}
for (int i = 0; i < r; i++)
{
for (int s = 0; s < c; s++)
{
myFile >> z;
matrix[i][s] = z;
}
}
row = r;
col = c;
myFile.close();
}
MatrixType::MatrixType(const MatrixType& mat)
{
row = mat.row;
col = mat.col;
matrix = new int*[row];
for (int i = 0; i < row; i++)
{
matrix[i] = new int[col];
}
for (int i = 0; i < row; i++)
{
for (int s = 0; s < col; s++)
{
matrix[i][s] = mat.matrix[i][s];
}
}
}
MatrixType::MatrixType()
{
}
MatrixType::~MatrixType()
{
for (int i = 0; i < row; i++)
{
delete[] matrix[i];
}
delete[] matrix;
}
源代码
#include "MatrixType.h"
#include <iostream>
#include <iomanip>
#include <string>
#include <fstream>
using namespace std;
int main()
{
MatrixType M1("matrixfile1.txt");
MatrixType M2("matrixfile2.txt");
MatrixType M3("matrixfile3.txt");
cout << "Matrix 1:" << endl << M1 << endl << endl;
cout << "Matrix 2:" << endl << M2 << endl << endl;
cout << "Matrix 3:" << endl << M3 << endl << endl;
MatrixType M4 = M1 + M3;
return 0;
}
因此,基本上的目标是检查矩阵是否相同,否则您应该只看到矩阵尺寸不同的打印件。 矩阵文件1,2,3看起来像
3 3
1 1 1
1 1 1
1 1 1
显示数组及其元素的尺寸。我的问题是我该怎么做才能使我的运算符功能更好地工作,因为它目前尚无法将矩阵加在一起。尽管其他所有内容再次可以正常工作,但只有操作员遇到读取访问冲突。
答案 0 :(得分:2)
MatrixType::MatrixType()
{
}
这根本不会初始化成员row
,col
或matrix
,因此尝试使用其中任何一个的当前值是不确定的行为。
由于您根本没有提供更改MatrixType
的尺寸的方法,即使使用operator=
也是如此,因此似乎没有很好地使用默认构造函数,并且可能MatrixType()
默认构造函数根本不应该存在。
MatrixType MatrixType::operator+(const MatrixType& mat) const
{
MatrixType tempMatrix;
您的operator+
首先使用默认构造函数初始化tempMatrix
。所以tempMatrix
的尺寸是...?