下面这段程序为什么编译时出错?该怎么解决

下面这段程序为什么编译时出错?
#include   <iostream>
using   namespace   std;
int   f(int   i){return   ++i};
int   g(int   &i){return   ++i};
int   main()
{        
int   a(0),b(0);
a+=f(g(a));
b+=g(f(b));
cout < <m < < "\t " < <n;;

        system( "pause ");
}


------解决方案--------------------
using namespace std;
int f(int i){return ++i;}
int g(int i){return ++i;}
int main()
{
int a(0),b(0);
a+=f(g(a));
b+=g(f(b));
cout < <a < < "\t " < <b;;

system( "pause ");
}

这样就没错了
------解决方案--------------------
#include <iostream>
using namespace std;

int f(int i)
{
return ++i;
}

int g(int &i)
{
return ++i;
}

int main()
{
int a( 0 ),b( 0 );

a += f( g( a ) );
b += g( f( b ) );  //这里不能编译通过,因为g()用引用传递参数,而f(b)是返回一个临时变量

system( "pause ");
}

------解决方案--------------------
赶紧把你那本破书扔了