我想调用一个类的公共函数,该类的对象作为返回类型从一个函数传递到另一个函数。
我在在线编译器上编写代码:
//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;
^~~~~~~
答案 0 :(得分:2)
似乎您没有在调用方法try csum = node1.getmax()。
编译错误告诉您raw方法不是整数,而是方法指针。
答案 1 :(得分:0)
getmax()
是一个函数。它需要括号。
尝试以下方法:
csum=node1.getmax();
您也需要在这些行上做完全相同的事情:
U=node1.getup();
D=node1.getdown();
编辑:我还应该提到您的问题与访问私有成员无关。相反,它与getmax()
,getup()
和getdown()
是函数这一事实有关。在C ++中,调用函数的名称后需要带括号。