el error logico
if (esVocal())
{
CanVoc++;
}
junto con
if (CadCar[i] =='A' || CadCar[i] =='E' || CadCar[i] =='I' || CadCar[i] =='O' || CadCar[i] =='U'
|| CadCar[i] =='a' || CadCar[i] =='e' || CadCar[i] =='i' || CadCar[i] =='o' || CadCar[i] =='u'){
return true;
si tiene vocal retorna true... listo, fin de la funcion... no se repite porque el return es definitivo, ya salió de la función... en tal caso tienes que llevar un contardor y retornar un int
te recomiendo que uses el debuuger de tu ide para que puedas visualizarlo...
sobre el segundo... los "iterator" son como punteros, pero con funciones divertidas...
más info aquíen la linea 4, crea un iterador y lo apunta al inicio
en el for, crea un iterador y lo apunta al primero, si el iterador no llega al final, lo avanza 1
el if comprueba el caracter apuntado
distance( it, it2 ); mide la distancia entre 2 punteros
string(it, it2 ); retorna el string creado por el contenido entre los 2 punteros