| 9 | ошибка: недопустимое использование нестатического члена данных 'Matrix :: row' | 9 | ошибка: граница массива не является целочисленной константой до токена ']' | - PullRequest
0 голосов
/ 02 марта 2019

Может кто-нибудь, пожалуйста, выяснить проблемы в этом коде для меня.Я использую кодовые блоки 17.12.Я пытаюсь создать класс Matrix, в котором я хочу инициализировать матрицу с помощью конструктора, а затем получить члены массива с помощью функции.А затем перегрузите оператор '*', чтобы умножить две введенные матрицы.А затем перегрузите ostream, чтобы показать уже заданную матрицу в качестве входных данных или продукта (например, "cout << m << endl;). </p>

#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) === |

матрица классов \ main.cpp | 9 | ошибка: недопустимое использование нестатическихэлемент данных 'Matrix :: row' |

Class Matrix \ main.cpp | 7 | note: объявлено здесь |

Class Matrix \ main.cpp | 9 | ошибка: недопустимое использование nonэлемент статических данных 'Matrix :: column' |

Matrix Class \ main.cpp | 8 | примечание: объявлено здесь |

Matrix Class \ main.cpp || В конструкторе 'Matrix:: Matrix (int, int) ': |

Matrix Class \ main.cpp | 42 | ошибка: ожидаемое первичное выражение до' int '|

Matrix Class \ main.cpp | 42| ошибка: ожидаемое первичное выражение до 'int' |

Matrix Class \ main.cpp || В функции-члене 'void Matrix :: setMatrix (Matrix)': |

Class Matrix \main.cpp | 69 | ошибка: ожидаемое первичное выражение перед 'A' |

Class Matrix \ main.cpp | 70 | ошибка: нет совпадения для 'operator []' (типы операндов: 'Matrix' и 'int') |

|| === Ошибка сборки: 6 ошибок, 0 предупреждений (0 минут, 0 секунд) === |

Я очень ценю вашу помощь и благодарю вас.Я студент современного обучения с ++.Я все еще работаю над этим кодом.

Редактировать: - Пока я уменьшил количество ошибок, но "двойной A [строка] [столбец] является для меня главной головной болью. Я хочу это так, потому что я хочусоздайте матрицу, аналогичную той, что я делал в главной функции. Затем в качестве входных данных возьмите члены массива. Надеюсь, это редактирование прояснит мой вопрос далее.

Спасибо ...

1 Ответ

0 голосов
/ 02 марта 2019
  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];
        }
    

    в вашем конструкторе, затем удалите его в своем деконструкторе.

    Я думаю, что вы можете просто использовать вектор вместо массива.

...