我遇到了一些问题。
1)它表示'matrix'作为2d数组的声明必须有边界(头文件中的** mPoint)。为什么?我希望它是动态的,我该如何解决它?
2)另一个问题是“mPoint”未在此范围内声明,在.cpp文件中的(Square_Matrix :: Set_Size)中声明。
3)最后它说明了析构函数中的定义(Square_Matrix :: ~Square_Matrix)。
我的c ++书中似乎没有回答我的问题。
//header file
#include <iostream>
using namespace std;
class Square_Matrix
{
public:
int **mPoint;
int N;
Square_Matrix();
~Square_Matrix();
void Set_Size (int new_size);
};
//.cpp file
#include <iostream>
using namespace std;
#include "Square_Matrix.h"
Square_Matrix::Square_Matrix()
{
mPoint = new int*[0];
mPoint[0] = new int[0];
N = 0;
}
Square_Matrix::~Square_Matrix() //destructor
{
for (int i = 0; i < N; i++){
delete [] mPoint[i];
}
delete [] mPoint;
}
void Square_Matrix::Set_Size (int new_size)
{
for (int i = 0; i < N; i++){ //deallocates memory if there's already a matrix
delete [] mPoint[i];
}
delete [] mPoint;
N = new_size;
mPoint = new int*[new_size]; //create dynamic 2d array of size new_size
for (int i = 0; i < new_size; i++){
mPoint[i] = new int[new_size];
}
}
答案 0 :(得分:0)
您没有在类定义中声明析构函数。所以编译器隐式声明了它。然而,您自己定义析构函数。你可能不这样做。
在构造函数中,您没有初始化mPoint。因此,例如函数Set_Size中的代码具有未定义的行为。
答案 1 :(得分:0)
Square_Matrix::Square_Matrix()
{
mPoint = new int*[0];
mPoint[0] = new int[0];
N = 0;
}
您不想这样做,而且无效。只需将mPoint
的值设置为nullptr
即可。您不能分配大小为0的数组。
Square_Matrix::Square_Matrix() : mPoint(nullptr), N(0)
{
}