Bon ben ça foire à la compilation, et c'est logique pour la raison que je pensais : on ne peut avoir, dans fact, une référence à n de main :
#include <iostream>
using namespace std;
int fact(int &);
int main()
{
int n = 10;
n = fact(n);
cout << n;
}
int fact (int n)
{
if (n == 1)
return 1;
else
return n * fact(n-1);
}