带指针的C ++动态二维数组(矩阵)

时间:2011-10-19 20:55:48

标签: c++ pointers matrix operator-overloading

大家:

我正在创建一个程序,该程序能够创建矩阵,并在学校的课程上对它们执行各种操作。它们要求我们使用适当的Matrix操作使操作员超载。

我在使用以下功能时遇到了困难:

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警告我,在以下行:

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

type'const Matrix'不提供下标运算符

注意:此代码部分中省略了函数头,构造函数和其他函数。

非常感谢任何帮助。 谢谢。

3 个答案:

答案 0 :(得分:5)

鉴于您的实施,它应该是if (B.a[row][col] != a[row][col])

顺便说一句:如果你计划实现自己的矩阵类,你应该阅读this page

答案 1 :(得分:1)

你的意思是

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

如果你给它一点思考,你不能简单地做到

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

并跳过标志变量altogeher?如果是,为什么,如果没有,为什么不(奖励你奖励积分;)。

如果你想真正做B [] [],你必须为你的班级实现operator []:

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

答案 2 :(得分:1)

boost::ublas::matrixboost::gil::view_typeOpenCV::Mat等处获取提示,并使用operator(int,int)作为索引而不是下标运算符。它更容易实现,维护和调试。