我正在编写此矩阵程序,该程序将创建matrix(2d数组)并将值存储在其中。当前,我遇到一个特定元素的问题-mtx [rows] [cols] = value给我“表达式必须是对象类型的指针”错误,行和列带下划线
#include<iostream>
#include<cstdlib>
#include"matrix.h"
Matrix::Matrix(int rows, int cols)
{
int **mtx=new int*[rows];
for(int i=0; i<rows; i++)
{
mtx[i]=new int[cols];
}
}
void Matrix::setElem(int rows, int cols, int value)
{
mtx[rows][cols] = value;
}
//.h file
#ifndef MATRIX_H
#define MATRIX_H
#include<cstdint>
class Matrix
{
int rows;
int cols;
int mtx;
public:
Matrix(int rows, int cols);
void setElem(int rows, int cols, int value);
};
#endif
答案 0 :(得分:0)
您正在像这样在类中定义矩阵
int mtx;
然后在这样的构造函数中重新定义它
int **mtx;
在函数中重新定义类变量时,您在变量声明之后覆盖了该函数作用域的类变量。将类中的声明更改为
int **mtx;
并将其从构造函数中删除,它应该可以正常工作。 (您还需要一个析构函数)
这应该有效
#include<iostream>
#include<cstdlib>
#include"matrix.h"
Matrix::Matrix(int rows, int cols)
{
//int **mtx=new int*[rows]; // removed
mtx=new int*[rows]; // just allocate
for(int i=0; i<rows; i++)
{
mtx[i]=new int[cols];
}
this->rows = rows;
this->cols = cols;
}
void Matrix::setElem(int rows, int cols, int value)
{
mtx[rows][cols] = value;
}
//.h file
#ifndef MATRIX_H
#define MATRIX_H
#include<cstdint>
class Matrix
{
int rows;
int cols;
int **mtx; // added stars
public:
Matrix(int rows, int cols);
//~Matrix(void); // You also need a destructor.
void setElem(int rows, int cols, int value);
};
#endif