无法访问其他函数的指针数组

时间:2019-04-04 20:42:52

标签: c++ arrays

我正在编写此矩阵程序,该程序将创建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

1 个答案:

答案 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