大家:
我正在创建一个程序,该程序能够创建矩阵,并在学校的课程上对它们执行各种操作。它们要求我们使用适当的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'不提供下标运算符
注意:此代码部分中省略了函数头,构造函数和其他函数。
非常感谢任何帮助。 谢谢。
答案 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::matrix
,boost::gil::view_type
,OpenCV::Mat
等处获取提示,并使用operator(int,int)
作为索引而不是下标运算符。它更容易实现,维护和调试。