Одна ошибка здесь:
i=str.length()
должно быть:
i < str.length()
В вашем исходном коде i=str.length()
всегда будет возвращать true, если строка не пустая. Таким образом, эффект состоит в том, что вы будете обгонять строку.
Кроме того, вы не хотите увеличивать индекс, когда вы найдете гласный, или пропустите следующий символ:
for (int i = 0; i < str.length(); )
{
if (checkVowel(str[i]))
{
str.erase(i,1);
}else{
i++;
}
}
Последнее: str=str.erase(i);
не обязательно, достаточно str.erase(i,1);
. (Вам понадобится второй параметр как 1, как указано в комментариях.)