Per iniziare, la funzione min è dichiarata con un prototipo e definita con un altro prototipo e un compilatore come il g++ si rifiuta giustamente di portare a termine la compilazione.
Secondo, visto che parliamo di C++ io dichiarerei la suddetta funzione così (ma questo è ininfluente ai fini del funzionamento corretto, diciamo che è una mia s*ga mentale):
void min (int, int);
Cioè senza nomi di parametro. Poi ovviamente la definizione sarà
void min (int minimo, int I);
In questo modo potrai cambiare il nome dei parametri passati alla funzione senza doverne riscrivere anche il prototipo. Bello il C++. :metallica