Динамическая 2D-матрица C ++ с указателями (матрица) - PullRequest
0 голосов
/ 20 октября 2011

каждый:

Я создаю программу, которая способна создавать матрицы и выполнять с ними различные операции для курса в школе.Они требуют, чтобы мы перегружали операторов соответствующей Матричной операцией.

Мне трудно выполнить следующую функцию:

typedef double matrixType;


using namespace std;


class Matrix{
protected:
    int m,n; // m:row size n:column size
    matrixType **a; //Allows us to acces the a(ij) i,j position of the matrix


//==================================================
// (==Operator)Verifies if two given Matrices are equal
//==================================================

bool Matrix::operator==(const Matrix &B){

bool flag=false;


if(B.m ==m && B.n ==n){

    for (int row=0; row<m; row++) {
        for (int col=0; col<n; col++) {
            if (B[row][col] != a[row][col]) {
                flag=false;
            }
        }
    }
    flag= true;
}

else{
    flag=false;

}

return flag;


}

Xcode предупреждает меня об этом в следующей строке:1008 *

 if (B[row][col] != a[row][col])

тип 'const Matrix' не предоставляет оператор нижнего индекса

Примечание: Заголовки функций, конструкторы и другие функции были исключены из этой части кода.Помощь будет принята с благодарностью.Спасибо.

Ответы [ 3 ]

5 голосов
/ 20 октября 2011

Учитывая вашу реализацию, оно должно быть if (B.a[row][col] != a[row][col])

Кстати: вы должны прочитать эту страницу , если планируете реализовать свой собственный класс матрицы.

1 голос
/ 20 октября 2011

Возьмите реплику от boost::ublas::matrix, boost::gil::view_type, OpenCV::Mat и т. Д. И используйте operator(int,int) для индексов вместо оператора индекса. Это проще в реализации, обслуживании и отладке.

1 голос
/ 20 октября 2011

То, что вы хотели сделать, было

if (B.a[row][col] != a[row][col]) {
                flag=false;
}

И если вы подумаете, не могли бы вы просто сделать

if (B.a[row][col] != a[row][col]) {
                return false;
}

и пропустить флаг переменной altogeher? Если да, почему, если нет, то почему бы и нет (присуждает вам бонусные баллы;).

Если вы действительно хотите выполнить B [] [], вам нужно реализовать оператор [] для вашего класса:

matrixType* operator[](size_t index) 
{
  return a[index];
}
...