Und Objekte bitte als Referenz an Methoden übergeben. In dem auskommentierten Teil sind mehrmals String Objekte als Wert (value) übergeben. Das ist nicht gut. Da braucht man auch keine Zeiger (wie bei paar der anderen Methoden). Einfach sowas:
void func(String& str)
{
}
Dann kannst du str.X machen anstatt str->X wie bei Zeigern