我需要构造一个矩阵类,并使用特定的函数为其赋值。
这是我的代码:
class MATRIX
{
int row, col;
double **p;
public:
MATRIX(int, int);
void Set(int, int, double);
~MATRIX();
};
MATRIX::MATRIX(int x, int y)
{
row = x;
col = y;
p = new double*[x];
for (int i = 0; i < x; i++)
{
p[i] = new double[y];
}
}
void MATRIX::Set(int a, int b, double d)
{
p[a][b] = d;
}
MATRIX::~MATRIX()
{
for (int i = 0; i < row; i++)
delete[] p[i];
delete[] p;
}
int main()
{
MATRIX A(2, 3); // Initializes a matrix with size 2x3
MATRIX B(7, 4); // Initializes a matrix with size 7x4
A.Set(1, 2, 4.7); // Sets the value of A[1][2] to 4.7
B.Set(0, 3, 2.9); // Sets the value of B[0][3] to 2.9
}
我在Set
函数中的调试器中看到了这一点:
this->p was 0x1110112
我该如何解决?
答案 0 :(得分:0)
因为这是C ++,这看起来更像C.也许一个好的第一步是编辑你的一些代码。我建议你为std :: array或std :: vector更改你的C风格数组。它在头文件中是这样的:
template<typename T, std::size_t rows, std::size_t columns>
class MATRIX
{
std::array<std::array<T, columns>, rows> matrix_data;
public:
MATRIX();
void Set(int, int, double);
~MATRIX();
};
这使用模板类,这意味着你必须在主
中做这样的事情MATRIX<double, 2, 3> A;
我没有时间编写整个代码,但我认为这会让你开始!古德勒克!