运算符重载:'operator []'不匹配

时间:2014-02-18 05:20:21

标签: c++ operator-overloading

该类由对象'mPoint'组成,它存储动态2D数组。我试图做到这一点,因此可以比较这些矩阵中的两个,看看它们是否相同。因此我正在重载运算符'=='。

我收到一个错误“'不匹配'运算符[]'(操作数类型是'Square_Matrix和'int'),它指向行”if(mPoint [i] [j]!= Par [i] [ j])“在.cpp文件中。我怎么能解决这个问题?我在重载方面很陌生

//header file
#include <iostream>
using namespace std;

class Square_Matrix
{
public:
   int **mPoint;
   int size;
   void Set_Size (int new_size);
   bool operator==(Square_Matrix Par);

//.cpp file
#include <iostream>
using namespace std;
#include "Square_Matrix.h"

void Square_Matrix::Set_Size (int new_size)
{
    for (int i = 0; i < size; i++){
        delete [] mPoint[i];
    }
    delete [] mPoint;

    size = new_size;
    mPoint = new int*[new_size];
    for (int i = 0; i < new_size; i++){
        mPoint[i] = new int[new_size];
    }
}

bool Square_Matrix::operator==(Square_Matrix Par){
    if (size != Par.size){
        return false;
    }
    for (int i = 0; i < size; i++){
        for (int j = 0; j < size; j++){
            if (mPoint[ i ][ j ] != Par[ i ][ j ]){
                return false;
            }
        }
    }
    return true;
}

2 个答案:

答案 0 :(得分:1)

您的问题在这一行if (mPoint[ i ][ j ] != Par[ i ][ j ]){ 您正在尝试在[][]的实例上应用运算符Square_Matrix。这就是为什么编译器说'不匹配'运算符[]'“

您应该使用类似if (mPoint[ i ][ j ] != Par.mPoint[ i ][ j ]){的内容来解决此问题。我认为这是一个错字。

最好将const Square_Matrix&作为参数传递。 在您的标头文件中,将operator==签名更改为,    bool operator==(const Square_Matrix& Par);

并在cpp文件中

bool Square_Matrix::operator==(const Square_Matrix& Par)
{
    // your logic.
}

答案 1 :(得分:1)

最简单的解决方案是按照以下方式更改operator==()

bool Square_Matrix::operator==(const Square_Matrix& Par){
    if (size != Par.size){
        return false;
    }
    for (int i = 0; i < size; i++){
        for (int j = 0; j < size; j++){
            if (mPoint[ i ][ j ] != Par.mPoint[ i ][ j ]){
                return false;
            }
        }
    }
    return true;
}

您的Square_Matrix类没有operator[]()。此外,由于这是一个类成员函数,您可以访问Square_Matrix输入参数的私有成员 - 因此请直接使用它们。最后你应该把它作为避免副本的引用,但这也意味着你想要阻止更改,所以把它作为const引用。