| 9 |错误:无效使用非静态数据成员'Matrix :: row'| 9 |错误:数组绑定不是']'标记前的整数常量|

时间:2019-03-02 07:40:50

标签: c++ matrix operator-overloading matrix-multiplication ostream

有人可以帮我找出这段代码中的问题吗?我正在使用代码块17.12。 我正在尝试创建一个Matrix类,其中我想使用构造函数初始化一个矩阵,然后使用一个函数获取数组的成员。 然后重载'*'运算符以将两个输入的矩阵相乘。然后重载ostream以显示已经给定的矩阵作为输入或乘积(例如“ cout << m << endl;)。

#include <iostream>
using namespace std;

class Matrix
{
private:
    //static int row;                  //don't work
    //static const int row;            //don't work 
    //constexpr int row;               //don't work
    int row;
    int column;

//Here my moto is to make a matrix which takes input from the user and 
create the matrix of desired size at runtime.
    double A[row][column];

public:
    Matrix(int row,int column);
    Matrix(Matrix &mat);
    void setRowXColumn(int row,int column);
    void setColumn(int column);
    void setMatrix(Matrix A);
};


int main()
{
    //Here 3 and 2 are the rows and columns of the matrix m respectively.
    Matrix m(3,2);
    return 0;
}

Matrix::Matrix(int row=0,int column=0)          
{
    setRowXColumn(int row,int column);       //error: expected primary-expression before 'int'|
                                             //what primary-expression?
}

Matrix::Matrix(Matrix &mat)
{
    row=mat.row;
    column=mat.column;
}


void Matrix::setRowXColumn(int row,int column)
{
    if(row<0)
        this->row=0;
    else
        this->row=row;
    if(column<0)
        this->column=0;
    else
        this->column=column;
 }
//And i also want the members as input by the user at runtime.
void Matrix::setMatrix(Matrix A)
{
    for(int i=0;i<row;i++)
     {
        for(int j=0;j<column;j++)
        {
            cout<<"Enter"<<Matrix A<<"["<<i<<"]"<<"["<<j<<"]"<<endl;
            cin>>A[i][j];
        }
    }
}

从上面的代码中,我遇到以下错误。

|| ===生成:在类矩阵中调试(编译器:GNU GCC编译器)=== |

Matrix Matrix \ main.cpp | 9 |错误:无效使用非静态数据成员Matrix :: row'|

Class Matrix \ main.cpp | 7 |注意:在此声明|

Matrix \ main.cpp | 9 |类错误:无效使用非静态数据成员Matrix :: column'|

Class Matrix \ main.cpp | 8 |注意:在此处声明|

Matrix Matrix \ main.cpp ||在构造函数'Matrix :: Matrix(int,int)':|

Matrix Matrix \ main.cpp | 42 |错误:“ int”之前的预期主表达式|

Matrix Matrix \ main.cpp | 42 |错误:“ int”之前的预期主表达式|

Class Matrix \ main.cpp ||在成员函数'void Matrix :: setMatrix(Matrix)':|

Class Matrix \ main.cpp | 69 |错误:“ A”之前的预期主要表达式|

Matrix \ main.cpp | 70 |类错误:'operator []'不匹配(操作数类型为'Matrix'和'int')|

|| ====构建失败:6个错误,0个警告(0分钟,0秒)=== |

非常感谢您的帮助,也谢谢您。 我是一名正在学习c ++的学生。 我仍在编写此代码。

编辑:-到目前为止,我已经减少了错误,但是“双A [row] [column]是我的主要头疼。我想要这样,因为我想像我在main函数中那样创建一个矩阵然后,将数组的成员作为输入。 希望此编辑进一步阐明我的问题。

谢谢...

1 个答案:

答案 0 :(得分:1)

  1. void Marix::setRowXColumn(int row,int column)。它应该是矩阵。您在使用IDE时,它应该警告您这些错字。

  2. setRowXColumn(int row,int column)应该是setRowXColumn(row,column);

  3. c ++语句始终需要一个“;”最后。

  4. double A[row][column];,如果您尝试创建“动态数组”,请使用double **A;进行此操作。和

        A = new double*[row];
    
        for(int i = 0; i < row; i++){
            A[i] = new double[column];
        }
    

    在构造函数中,然后在解构函数中将其删除。

    在这种情况下,我认为您可以使用向量而不是数组。