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;
}