Solo che queste due non possono coesistere
void ConsonantiCognome(char, char, int, int);
void ConsonantiCognome(char cognome[n], char cod_cognome[v], int numero_consonanti = 0, int numero_vocali = 0)
perché sono dichiarazioni diverse.
Un esempio semplificato è questo
#include <iostream>
#define N 25
#define V 3
using namespace std;
void ConsonantiCognome(char cognome[N], char cod_cognome[V])
{
int cons=0;
for(int i=0; cognome[i]!='\0' && cons<V; i++)
{
if(cognome[i] == 'a'|| cognome[i] == 'e' || cognome [i] == 'i' || cognome[i] == 'o' || cognome[i] == 'u' || cognome[i] == 'A'
|| cognome[i] == 'E' || cognome[i] == 'I' || cognome[i] == 'O' || cognome[i] == 'U' || cognome[i] == ' ')
{
}
else
{
cod_cognome[cons++] = cognome[i];
}
}
}
int main()
{
char cognome[N];
char cod_cognome[V] = {0};
cout <<"Cognome : ";
cin.getline(cognome, N);
ConsonantiCognome(cognome, cod_cognome);
for(int i=0; i<V; i++)
cout << cod_cognome[i] ;
return 0;
}