簡體   English   中英

c ++:函數“沒有匹配的函數可調用”錯誤

[英]c++ : “no matching function for call to” error with function

我在類“ MAX_SUB_MAT”中定義了一個函數“ mod_kadane”,該函數返回一個對象。

#define dx 101
class MAX_SUB_MAT
{


public:
int curr_sum, max_sum, left, right, up, down;

MAX_SUB_MAT mod_kadane(int mat[dx][dx], int row, int column)
{
    MAX_SUB_MAT objx;
    curr_sum = objx.max_sum = INT_MIN;
    int sub_mat[row];

    for(int L = 0; L < row; L++)
    {
        memset(sub_mat, 0, sizeof sub_mat);
        for(int R = L; R < column; R++)
        {
            for(int i = 0; i < row; i++)
            {
                sub_mat[i] += i;//mat[i][R];
            }

            MAX_SUB_ARR obj;
            obj = obj.kadane(sub_mat, row);
            curr_sum = obj.maxima;

            if(curr_sum > objx.max_sum)
            {
                objx.max_sum = curr_sum;

                objx.left = L;
                objx.right = R;
                objx.up = obj.left;
                objx.down = obj.right;
            }
        }
    }
    return objx;
}
};

但是,當我嘗試從“ main”調用它時:

cin >> row >> column;
int mat[row][column];
for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
        {
            cin >> mat[i][j];
        }
    }

MAX_SUB_MAT objx;
objx = objx.mod_kadane(mat, row, column);

然后顯示錯誤:

錯誤:沒有匹配的函數可以調用'MAX_SUB_MAT :: mod_kadane(int [row] [column],int&,int&)'|

但是,如果我從兩邊都刪除了2d數組“ mat”,則代碼可以正常工作。

這是我的完整代碼:

#include<bits/stdc++.h>

#define dx 101

using namespace std;

class MAX_SUB_ARR
{
public:
int max_curr, maxima, left, right;


MAX_SUB_ARR kadane(int arr[], int n)
{
    MAX_SUB_ARR obj;

    obj.maxima = max_curr = INT_MIN;
    //cout << obj.maxima << endl;
    /*for(int i = 0; i < n; i++)
        cout << arr[i] << endl;*/
    for(int i = 0; i < n; i++)
    {
        if(max_curr < 0)
        {
            max_curr = arr[i];
            obj.left = i;
        }
        else
        {
            max_curr += arr[i];
        }

        //maxima = max(maxima, max_curr);
        if(max_curr > obj.maxima)
        {
            obj.maxima = max_curr;
            obj.right = i;
            //cout << obj.maxima << endl;
        }
    }

    return obj;
}
};

class MAX_SUB_MAT
{


public:
int curr_sum, max_sum, left, right, up, down;
/* MAX_SUB_MAT(int r, int c)
{
    row = r;
    column = c;
}*/

MAX_SUB_MAT mod_kadane(int mat[dx][dx], int row, int column)
{
    MAX_SUB_MAT objx;
    curr_sum = objx.max_sum = INT_MIN;
    int sub_mat[row];

    for(int L = 0; L < row; L++)
    {
        memset(sub_mat, 0, sizeof sub_mat);
        for(int R = L; R < column; R++)
        {
            for(int i = 0; i < row; i++)
            {
                sub_mat[i] += i;//mat[i][R];
            }

            MAX_SUB_ARR obj;
            obj = obj.kadane(sub_mat, row);
            curr_sum = obj.maxima;

            if(curr_sum > objx.max_sum)
            {
                objx.max_sum = curr_sum;

                objx.left = L;
                objx.right = R;
                objx.up = obj.left;
                objx.down = obj.right;
            }
        }
    }
    return objx;
}
};


int main()
{

int row, column;

printf("Number of rows you want to insert?:\n");
cin >> row;

printf("Number of columns you want to insert?:\n");
cin >> column;

int mat[row][column];

if(row && column)
{
    for(int i = 0; i < row; i++)
    {
        for(int j = 0; j < column; j++)
        {
            cin >> mat[i][j];
        }
    }

    //int curr_sum, max_sum, left, right, up, down;


    //MAX_SUB_MAT objx = new MAX_SUB_MAT(row, column);
    MAX_SUB_MAT objx;
    objx = objx.mod_kadane(mat, row, column);

    for(int i = objx.up; i <= objx.down; i++)
    {
        for(int j = objx.left; j <= objx.right; j++)
        {
            cout << mat[i][j] << " ";
        }

        cout << endl;
    }
}

return 0;
}

在C或C ++中,我們不能使用兩個指定大小的二維數組參數聲明函數,這是不正確的。

請參閱: http//c-faq.com/aryptr/pass2dary.html

@AlanStokes在他的評論中已正確解釋了該問題!

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM