首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 开发语言 > C++ >

一路C++的作业,无法通过编译,求解!

2012-11-05 
一道C++的作业,无法通过编译,求解!!#includestdio.hint f(int i){return++i}int g(int &i){return++i}

一道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,需要的结果又是什么?

热点排行