该类由对象'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;
}
答案 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引用。