cannot convert parameter 1 from 'int' to 'int &' A reference that is not to 'const' cannot be bound

代码如下:a.h文件externintp_abs(int&a);externintp_max(int&a,int&b);classa{public:a():x(0),y(... 代码如下:
a.h文件
extern int p_abs(int &a);
extern int p_max(int &a,int &b);
class a{
public:
a():x(0),y(0){}
a(const int &i,const int &j):x(i),y(j){}
int get_x(){
return x;
};
int get_y(){
return y;
};
void set_x(const int &i){

x=i;
};
void set_y(const int &i){

y=i;
};
void printa()
{
std::cout<<"x is "<<get_x()<<"\ty is "<<get_y()<<std::endl;
};
int get_max(){
/*
int p1=p_abs(x),p2=abs(y);
return p_max(p1,p2);
*/
return p_max(p_abs(x),p_abs(y));

};

private:
int x;
protected:
int y;
};

cpp1.cpp:
#include<iostream>
#include"a.h"
using namespace std;
int main(){
a a1,a2(4,5);
a *ap=0;
ap=&a1;
ap->printa();
cout<<ap->get_max()<<endl;
return 0;
}
cpp2.cpp:
int p_abs(int &a){

return a>0?a:-a;
};
int p_max(int &a,int &b){

return a>b?a:b;
};
问题如下:
在类a的public成员函数get_max()中上述代码通不过,报错已经给出“cannot convert parameter 1 from 'int' to 'int &' A reference that is not to 'const' cannot be bound” ,但使用被我注释的那段却可以通过,请高手指点下迷津,我想知道下原理。
阐述下我本来的想法是在a中新设个private :int z.
然后在a的构造函数的初始列表中初始化z,使z取x与y各自绝对值最大数,
跟上述情况一样,发现在类中嵌套使用上述p_max与p_abs通不过编译,希望能指点下迷津。
展开
 我来答
cn5cn555
2010-10-14 · TA获得超过806个赞
知道答主
回答量:637
采纳率:0%
帮助的人:240万
展开全部
h[i]=sum(e1[i].hperday[m]); //就是这里出错,不知道错在哪??

//============================================================
double sum(double a[m]){ //主函数调用这个函数的时候就会出现以上的错误

//============================================================
虽然只有15分~但是帮你解决下。你在函数声明的时候你的形参double类型的数组a[m]?但是你为什么传实参的时候传入e1[i].hperday[m],而e1[i].hperday[m]不是一个数组 而是“一个具体的double类型的值”?double类型的数组哪能对应一个具体的double类型的值?显然逻辑错误!请你好好改正!

//=============================================================
祝你顺利解决,我是zengraoli。

//=============================================================
对你追加提问的回答:
错不错在你结构体定义的数组里面?明白?
是错在你传参数进去的时候,给定的是一个确定的值,
要传入数组你可以这么来传“e1[i].hperday”?明白?
我这里没编程工具,无法帮你完全修改,希望你能自己修改过来。

看了看,发现你说的这里//初始化函数,这个检查过了,没有错误
定义的时候需要返回一个employee initialize(employee e1)但是你后面却没有return。好好修改一下,部分还是有小小的错误的。
.
希望能够帮助你 ^_^ 也希望能够选为最佳答案!
sun_siliang
2010-10-14 · TA获得超过2.6万个赞
知道大有可为答主
回答量:9913
采纳率:100%
帮助的人:4522万
展开全部
这是左值与右值的区别。左值就是可以出现在=号左边的量,如变量;右值就是只能出现在号右边的量,如常量3,4等;

int p_max(int &a,int &b);两个参数类型必须是左值,不能是常量,而p_abs(x),p_abs(y)两个表达式就是常量,是右值。

希望能对你有帮助!
本回答被提问者和网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式