如何使用私有成员引用传递给其他函数的对象?

时间:2019-07-01 21:11:32

标签: c++

我想调用一个类的公共函数,该类的对象作为返回类型从一个函数传递到另一个函数。

我在在线编译器上编写代码:

//problem is about finding  rectangle matrix with max sum from a given matrix

#include<bits/stdc++.h>
using namespace std;

class node{

    private:
     int max;
     int up;
     int down;

     public:
     void fill(int a,int b,int c)
     {
        max=a,up=b,down=c;
     }
     int getmax()
     {
        return max;
     }
     int getup()
     {
        return up;
     }
     int getdown()
     {
        return down;
     }
};


node kadane(int tem[1000000],int end1)
{

    node node1;   //created object

    int i,max=-200,csum=0,up,down;

    for(i=0;i<end1;i++)
    {
        if(csum==0)
         up=i;
        csum+=tem[i];
        if(csum>max)
        {
          max=csum;
          down=i;
        }
        if(csum<0)
         csum=0;
    }

    node1.fill(max,up,down);
    cout<<max<<endl;
    return node1; //passing object to main function
}

int main() 
{

    int row,col,m,n,i,j,k;
    cin>>row>>col;
    int a[1000][1000],temp[100000];
    for(i=0;i<row;i++)
    for(j=0;j<col;j++)
      cin>>a[i][j];

    node node1;  //created object
    int L,R,U,D,msum=-200,csum=0;
    for(i=0;i<col;i++)
    {
        for(j=0;j<row;j++)
         temp[j]=0;
        for(j=i;j<col;j++)
         {
            for(k=0;k<row;k++)
             temp[k]+=a[k][j];

            node1=kadane(temp,row);
            csum=node1.getmax;//showing the error

            if(csum>msum)
             {
                msum=csum;
                L=i;
                R=j;
                U=node1.getup;  //showing error
                D=node1.getdown; //showing error
             }
         }
    }

    cout<<"UDLR"<<U<<D<<L<<R;

    for(i=U;i<=D;i++)
     {
        cout<<endl;
        for(j=L;j<=R;j++)
          cout<<a[i][j]<<"\t";
     }

    cout<<endl<<"sum"<<msum;

    return 0;
}

我希望输出:

总和为18

但是相反,我收到以下错误消息:

prog.cpp:74:16: error: cannot convert ‘node::getmax’ from type ‘int (node::)()’ to type ‘int’
     csum=node1.getmax;
                ^~~~~~
prog.cpp:81:15: error: cannot convert ‘node::getup’ from type ‘int (node::)()’ to type ‘int’
       U=node1.getup;
               ^~~~~
prog.cpp:82:15: error: cannot convert ‘node::getdown’ from type ‘int (node::)()’ to type ‘int’
       D=node1.getdown;
               ^~~~~~~

2 个答案:

答案 0 :(得分:2)

似乎您没有在调用方法try csum = node1.getmax()。

编译错误告诉您raw方法不是整数,而是方法指针。

答案 1 :(得分:0)

getmax()是一个函数。它需要括号。

尝试以下方法:

csum=node1.getmax();

您也需要在这些行上做完全相同的事情:

U=node1.getup();     
D=node1.getdown();

编辑:我还应该提到您的问题与访问私有成员无关。相反,它与getmax()getup()getdown()是函数这一事实有关。在C ++中,调用函数的名称后需要带括号。