C++ 调用布尔函数但得到错误“;没有要调用的匹配函数";?

C++ 调用布尔函数但得到错误“;没有要调用的匹配函数";?,c++,arrays,function,pointers,boolean,C++,Arrays,Function,Pointers,Boolean,我试图动态地声明2d数组,并用随机数填充它们,然后创建一个函数来比较两个2d数组中的元素,如果它们相等,则返回true 然而,当我试图调用布尔函数时,总是会出错 #include <iostream> #include <cstdlib> using namespace std; bool isEqual(int *arr1[], int *arr2[], bool &eq, int row, int col){ for(int r = 0; r<row

我试图动态地声明2d数组,并用随机数填充它们,然后创建一个函数来比较两个2d数组中的元素,如果它们相等,则返回true

然而,当我试图调用布尔函数时,总是会出错

#include <iostream>
#include <cstdlib>
using namespace std;

bool isEqual(int *arr1[], int *arr2[], bool &eq, int row, int col){

for(int r = 0; r<row;r++)
{
    for(int c= 0; c<col;r++)
    {
        if(arr1[r][c]==arr2[r][c])
            eq = true;
    }
}
return eq;
 }

int main()
{
const int R = 3;
int * arr2D_a[R];
int * arr2D_b[R];
int C;

cout << "Enter number of columns: ";
cin >> C;
for (int r = 0; r < R; r++) {
    arr2D_a[r] = new int [C];
    arr2D_b[r] = new int [C];
}



for (int r = 0; r < R; r++) {
    for (int c = 0; c < C; c++) {
        arr2D_a[r][c] = rand() % 2;
        arr2D_b[r][c] = rand() % 2;
    }
}

bool result = false;
isEqual(arr2D_a,arr2D_b,result,R,C);

if (result==true)
    cout << "\nThe 2 array are the same!\n";
else
    cout << "\nThe 2 array are the differernt!\n";

for (int c = 0; c < C; c++) {
    delete[] arr2D_a[C];
    delete[] arr2D_b[C];

}
for (int r = 0; r < R; r++)  {
    delete[] arr2D_a[r];
    delete[] arr2D_b[r];

}


system("pause");
}
#包括
#包括
使用名称空间std;
布尔isEqual(int*arr1[],int*arr2[],布尔与均衡器,int行,int列){

对于(int r=0;r编辑),我冒昧地重写了您的代码。我发布的代码,在VS2017中编译

你的比较似乎有点不对劲

#include <iostream>
#include <cstdlib>
using namespace std;

bool isEqual(int* arr1[], int* arr2[], const int row, const int col) {

    for (int r = 0; r < row; r++)
    {
        for (int c = 0; c < col; c++)
        {
            if (arr1[r][c] != arr2[r][c])
                return false;
        }
    }
    return true;
}

int main()
{
    const int R = 3;
    int * arr2D_a[R];
    int * arr2D_b[R];
    int C;

    cout << "Enter number of columns: ";
    cin >> C;
    for (int r = 0; r < R; r++) {
        arr2D_a[r] = new int[C];
        arr2D_b[r] = new int[C];
    }



    for (int r = 0; r < R; r++) {
        for (int c = 0; c < C; c++) {
            int value = rand();
            arr2D_a[r][c] = value % 2;
            arr2D_b[r][c] = value % 2;
        }
    }

    bool result = isEqual(arr2D_a, arr2D_b, R, C);

    if (result)
        cout << "\nThe 2 array are the same!\n";
    else
        cout << "\nThe 2 array are the differernt!\n";

    for (int r = 0; r < R; r++) {
        delete[] arr2D_a[r];
        arr2D_a[r] = 0;
        delete[] arr2D_b[r];
        arr2D_b[r] = 0;
    }

    return 0;
}
#包括
#包括
使用名称空间std;
布尔相等(int*arr1[],int*arr2[],常量int行,常量int列){
对于(int r=0;rC;
for(int r=0;rcout上面的答案解决了大部分问题,但您将得到
segfault
her

for (int c = 0; c < C; c++) {
    delete[] arr2D_a[c];
    delete[] arr2D_b[c];

}
您需要做的是离开第二个循环:

for (int r = 0; r < R; R++) {
    delete[] arr2D_a[r];
    delete[] arr2D_b[r];
}
for(int r=0;r

因为您在每个
arr2D_a[r]
arr2D_b[r]
中分配了
C
空间量,您会得到什么错误?您对两个
循环使用相同的变量
r
。循环范围内没有使用的变量。这是故意的吗?您在
中有一个输入错误(int r=0;r
。你在数组索引中使用了错误的
R
。@MatthieuBrucher IDK。有太多错误/打字错误,如果不知道OP有什么错误,很难知道。请尝试
bool isEqual(int**arr1,int**arr2,bool&eq,int row,int col)?即使在主声明EQ中,我将它作为折光传递……我确实读过了……最好在函数本身声明返回。BTW...本地的C++类型应该通过带值的方式。C++的类型是什么意思?每种类型都可以声明变量,这些变量是“内置”的。-如int、bool、float,…@skratchi.at good job:)。试着输入55作为
C
的输入。你也必须修复
segfault
,你的答案是完美的!!!!然后我可以删除我的单字母变量,非常混乱…我用检漏仪检查了你的更改,他说,现在可以了^@skratchi。干得好!!!!!哈哈,我知道单字母的事情正在确认:(但世界并不完美。
for (int r = 0; r < R; R++) {
    delete[] arr2D_a[r];
    delete[] arr2D_b[r];
}