一道C++的作业,无法通过编译,求解!!
#include<stdio.h>
int f(int i){return++i;}
int g(int &i){return++i;}
int h(char &i){return++i;}
main()
{
int a=0,b=0,c=0;
a+=f(g(a));
b+=g(g(b));
c+=f(h(c));
pringf(“a=%d,b=%d,c=%d”,a,b,c);
}
[解决办法]
问题在于
b+=g(g(b));
g返回一个临时的int,临时int是一个rvalue,是不能被修改值的。因此你用g(int& i)会暗示给compiler你可能要修改形式参数i本身,所以你不能把g返回的rvalue又放入一个可能改变它的地方。可以把g改为:
g(int)
[解决办法]
- C/C++ code
#include <stdio.h>int f(int i){return ++i;}int g(int& i){return ++i;}int h(char& i){return ++i;}int main(int argc, char* argv[]){ int a = 0, b = 0; char c = 0; int i; i = g(a); a += f(i); i = g(b); b += g(i); i = h(c); c += f(i); printf("a=%d, b=%d, c=%d\n", a, b, c); return 0;}
[解决办法]
这个符不符合你的要求?
#include<stdio.h>
int main(){
int fun1(int);
int fun2(int);
int fun3(int);
int a,b,c;
a=0;
b=0;
c=0;
printf("a=%d,b=%d,c=%d\n",&a,&b,&c);
a+=fun3( fun1(&a) );
b+=fun2( fun2(&a) );
c+=fun1( fun3(&c) );
printf("a=%d,b=%d,c=%d\n",a,b,c);
return 0;
}
int fun1(int i){
return ++i;
}
int fun2(int i){
return ++i;
}
int fun3(char i){
return ++i;
}
[解决办法]
你的需求是什么? 让编译通过时很简单的。
[解决办法]
结果是不是全为3,需要的结果又是什么?