expected ‘;’ before ‘{’ [gelöst]



  • @hustbaer Versuche ich - scheinbar nicht sehr erfolgreich...

    Die Funktion soll eine Eingabe innerhalb des string answers speichern, alle Großbuchstaben zu Kleinbuchstaben konvertieren und anschließend wieder ausgeben.



  • @Richard_Wunsch sagte in expected ‘;’ before ‘{’:

    anschließend wieder ausgeben

    Warum steht dann keine Ausgabeanweisung in der Funktion sondern ein return?



  • @hustbaer Der Sinn dahinter ist, dass man bei Antworten nicht auf Groß- und Kleinschreibung prüfen muss - also quasi so etwas:

    #include <iostream>
    #include <algorithm>
    #include <string> 
    
    std::string lowLetter ()
    {
        std::string answer;
        std::getline (std::cin, answer);
        std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower);
        return answer;
    }
    
    int main ()
    {    
        std::cout << "Magst du Blumen?";
        
        lowLetter()
        {
            if (answer == "ja")
                std::cout << "Wer nicht?";
            else 
                std::cout << "Schade drum";
        }
        return 0;
    }
    


  • Hm...
    In deinem Beispiel, in if (answer == "ja"), was soll answer hier bedeuten?

    Und: Wie kommst du auf das Konstrukt

        lowLetter()
        {
              ...
        }
    

    Sowas gibt's in der Form in C++ nicht.



  • @hustbaer Die Antwort, die man mit std::getline (std::cin, answer) abgreift



  • @Richard_Wunsch sagte in expected ‘;’ before ‘{’:

    @hustbaer Die Antwort, die man mit std::getline (std::cin, answer) abgreift

    Du kannst aber die lokalen Variablen einer Funktion nicht in einer anderen verwenden. answer wird in lowLetter als Name für eine Variable verwendet, und hat daher dort eine Bedeutung. Innerhalb von main gibt es aber nichts was answer heisst, daher bekommst du dort auch eine entsprechende Fehlermeldung.



  • @hustbaer Ich dachte zu Initalisierung benutzt man curly braces...

    Ist es nicht möglich in der Funktionen einen Wert zu deklarieren und dann in die int main () zu übergeben? Dachte genau das würde return tun.



  • Danke, war retarded. Darauf wollte ich hinaus:

    #include <iostream>
    #include <algorithm>
    #include <string> 
    
    std::string lowLetter ()
    {
        std::string answer;
        std::getline (std::cin, answer);
        std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower);
        return answer;
    }
    
    int main ()
    {    
        std::cout << lowLetter();
        return 0;
    }
    
    


  • Genau, so sollte das gehen.
    Bzw. so könnte man es auch schreiben:

    #include <iostream>
    #include <algorithm>
    #include <string> 
    
    std::string lowLetter ()
    {
        std::string answer;
        std::getline (std::cin, answer);
        std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower);
        return answer;
    }
    
    int main ()
    {    
        std::string trallala = lowLetter();
        std::cout << trallala;
        return 0;
    }
    

    Oder, mit den {} zur Initialisierung geschrieben:

    #include <iostream>
    #include <algorithm>
    #include <string> 
    
    std::string lowLetter ()
    {
        std::string answer;
        std::getline (std::cin, answer);
        std::transform(answer.begin(), answer.end(), answer.begin(), ::tolower);
        return answer;
    }
    
    int main ()
    {    
        std::string trallala{ lowLetter() };
        std::cout << trallala;
        return 0;
    }
    

    Statt trallala könntest du natürlich wieder answer schreiben, ginge genauso. Ich hab extra einen anderen Namen verwendet um zu zeigen dass der eine Name nichts mit dem anderen zu tun hat. Lokale Variablen und ihre Namen sind eben lokal, d.h. nicht ausserhalb ihrer Funktion vorhanden/sichtbar. (Genauer: nicht ausserhalb ihres "scopes". Und was ein "scope" ist, das liest du besser online oder im C++ Buch deiner Wahl nach.)



  • @hustbaer Mach ich. Danke für die Beispiele + Erklärung!


Anmelden zum Antworten