Frage



  • wie kann ich das also verändern?
    tut mir leid das ich so viele fragen stelle , hoffe belestigt hir keinen 😉


  • Mod

    -ProGresS- schrieb:

    wie kann ich das also verändern?
    tut mir leid das ich so viele fragen stelle , hoffe belestigt hir keinen 😉

    Kommt drauf an, wie du compilierst. Auf der Kommandozeile schreibst du einfach g++ -Wall -Wextra .... , falls du eine IDE verwendest, wirst du dieser mit Sicherheit auch irgendwelche Optionen geben können und bei einem Makefile ist die dafür vorgesehene Variable traditionell CXXFLAGS.



  • Du kannst am Ende der Funktion ein return "echo"; hinschreiben, damit die main() auch etwas hat, was sie ausgeben kann.

    Und für die Zukunft: Alle Compiler-Warnungen einschalten und ein gutes Buch zum Umgang mit C++ besorgen.



  • ;O D.h er bastelt am Ende aber schon irgendein return-statment hin ( der compiler ) ?

    Weil was sollte sonst hier passieren

    int function_that_doesnt_return() {
        std::cout << "I wont return ;) " << std::endl;
    }
    int uninitialised;
    uninitialised = function_that_doesnt_return();
    

  • Mod

    cvcv schrieb:

    ;O D.h er bastelt am Ende aber schon irgendein return-statment hin ( der compiler ) ?

    Weil was sollte sonst hier passieren

    int function_that_doesnt_return() {
        std::cout << "I wont return ;) " << std::endl;
    }
    int uninitialised;
    uninitialised = function_that_doesnt_return();
    

    Ich weiß jetzt nicht wie die calling conventions intern genau funktionieren, aber da ist ja sicherlich irgendwo ein Speicherbereich für die Rückgabe einer Funktion. Und wenn die einfach so endet ohne etwas hinein zu schreiben, dann steht da das gleiche wie vorher, also irgendwelcher Müll, wie bei einer uninitialisierten Variablen.

    Soweit ich weiß ist das in C übrigens kein undefiniertes Verhalten, solange man die Rückgabe nicht benutzt.



  • jetzt aber was ich nicht ferstanden habe
    wenn ich compelire mit g++ neu.cpp -o neu Zeigt der am ende :
    Speicherzugriffsfehler
    wenn ich g++ neu.cpp -o neu -Wall -Wextra zeigt der noch mher Feller:
    neu.cpp: In function ‘std::string werten(std::string)’:
    neu.cpp:33:1: warning: no return statement in function returning non-void
    neu.cpp: In function ‘std::string podebnike(std::string)’:
    neu.cpp:18:1: warning: control reaches end of non-void function
    nick@nick-GA-790XTA-UD4:~/Arbeitsfläche/c++$

    was bringt also -Wextra und -Wall

    danke sher für denn Tip. ich hab in moment 2 c++ Bücher aber leider ferstehe ich nicht alles da drine und wenn ich nicht probire lehrne ich nix.
    IN moment das was in buch beschriben ist und die praktische aufgaben dazu kann ich amchen aber wenn ich wie jetzt versuche daraus was bischen großeres machen wird schon zu problem. Und glaube nur so kann man es lehrnen



  • -ProGresS- schrieb:

    was bringt also -Wextra und -Wall

    Da zeigt dir der Compiler einige zusätzliche Problemquellen an, die zwar ein Ergebnis bringen, aber nicht korrekt sind - wie in deinem Fall die fehlenden return-Anweisungen.
    (die Funktion podebnike wird auch ohne gültigen Rückgabewert beendet, wenn beide if-Bedingungen fehlschlagen)


  • Mod

    -ProGresS- schrieb:

    jetzt aber was ich nicht ferstanden habe
    wenn ich compelire mit g++ neu.cpp -o neu Zeigt der am ende :
    Speicherzugriffsfehler

    Nein, den Speicherzugriffsfehler macht dein Programm, nicht der Compiler. Das ist ein ganz großer Unterschied.

    wenn ich g++ neu.cpp -o neu -Wall -Wextra zeigt der noch mher Feller:
    neu.cpp: In function ‘std::string werten(std::string)’:
    neu.cpp:33:1: warning: no return statement in function returning non-void
    neu.cpp: In function ‘std::string podebnike(std::string)’:
    neu.cpp:18:1: warning: control reaches end of non-void function
    nick@nick-GA-790XTA-UD4:~/Arbeitsfläche/c++$

    Du bist gut. "Nur noch mehr Fehler". Der zeigt diese Fehler weil sie da sind! Das sind die Gründe für deinen Speicherzugriffsfehler.



  • Alles klar.
    danke sehr für Ihre Hilfe. 🙂

    MFG Nick



  • Lösung für das Problemm ist :

    #include <iostream>
    #include <string>
    
    using namespace std;
    
    string podebnike(string pPodebnike)
    {
        if (pPodebnike == "Damian")
        {
            return "POlle";
        }
        else if (pPodebnike == "Daniel")
        {
            return "Rapper";
        }
    	else
    	{
    		return "Keiner von beiden";
    	}
    }
    
    string werten(string pName)
    {
        string temp;
        if (pName == "Podebnik")
        {
    	cout << "welchen Damian oder Daniel?";
            cin >> temp;
            return podebnike(temp);
        }
        else
        {
            return "Name nicht gefunden";
        }
    }
    
    int main()
    {   
        string name;
        cout<< "Bitte ein Name: ";
        cin>> name;
        cout<< werten(name) << endl;
        return 0;
    }
    

Anmelden zum Antworten