Funktionen - was ist erlaubt?



  • Ich oute mich. Bin eine Lernender. Vielleich muss ich es ausprobieren...
    

    Learning by doing ist nie verkehrt... man kann noch so viel theorie büffeln und denken man verstehts - und erst im Praxistest stellt sich dann heraus ob mans wirklich kapiert hat.

    ...und den Code zu schreiben, der das ausprobiert benötigt wahrscheinlich weniger Zeit als dein posting 😃



  • Nexus schrieb:

    tiruwi schrieb:

    Ich oute mich. Bin eine Lernender. Vielleich muss ich es ausprobieren...

    Besser als Ausprobieren ist verstehen. Und das geht am besten, indem du Literatur dazu liest.

    Da gib ich dir Recht, jedoch sollte man natürlich parallel zum Lesen auch immer das ganze ausprobieren und kleine Programme schreiben, damit man das auch verinnerlicht, weil es bringt einem auch nichts wenn man 1000Seiten durchließt und dabei so gut wie nix programmiert hat. Dann ist man am Ende auch nicht viel schlauer 😋

    Lg freeG


  • Mod

    Und zudem sieht man auch einmal die ganzen Fehlermeldungen in einem Kontext in dem man weiß, was falsch ist. Manchmal sind Fehlermeldungen nämlich recht kryptisch, daher ist es gut sie mal gesehen zu haben. Und öfters stellen hier auch Leute Fragen mit eigentlich ganz eindeutigen und hilfreichen Fehlermeldungen, weil sie aus Gewohnheit gar nicht erst versuchen, die Fehlermeldungen zu verstehen.



  • Die Frage nach möglichen runtime errors wurde noch nicht geklärt. 🤡



  • Im Bezug auf was meinst du Runtime-Errors?
    Es kann ja keine geben wenn das ganze gar nicht erst kompiliert 😉

    Klar wenn du zum Beispiel die Funktion hast die einen Zeiger auf char als Parameter hat un du diesen in der Funktion mit

    delete pointer
    

    freigibst und nach der Funktion nochmal drauf zu greifen willst, ist das ja klar dass es dann einen Laufzeitfehler bzw undefiniertes Verhalten gibt.

    Oder was meinst du?

    Lg freeG



  • Runtime Fehler sind hier nur abhängig davon, was die "..." sind.



  • Vielen Dank für Eure Erklärungen. Schon ist das Thema klar.

    Doch die nächste Blockade folgt:

    Bin nun bei Tmeplates. Habe eine Funktion die Variablen miteinander vergleicht. Abgeleitet aus einem Template.

    Für mich gilt der Grundsatz beim Vergleichen von Zeichen und Strings

    **A<B und B<C
    **
    Hier nun meine Überraschung:

    *#include "stdafx.h"
    #include "stdio.h"
    #include "conio.h"
    #include <iostream>

    template<typename HSV>
    HSV probieren(HSV golz, HSV nando){

    return golz<=nando?golz:nando;
    }

    int main()
    {

    std::cout<<probieren("Ulm","Köln")<< std::endl;
    getchar();

    return(0);
    }

    Egal wie ich den Vergleichsoperator in der Funktion drehe. Es wird immer Ulm ausgegeben. Doch meiner Meinung nach ist der String "Ulm" doch größer als "Köln"*

    😮


  • Mod

    "Ulm" und "Köln" sind keine std::strings, sondern const char[]. Oder anders gesagt: Zeiger auf Zeichenketten die irgendwo im Datensegment des Programms liegen. Der Vergleichsoperator von Zeigern vergleicht aber deren numerischen Wert, nicht die Werte von den Sachen auf die sie zeigen.

    Übergib mal std::string("Köln") , bzw. std::string("Ulm") .

    Außerdem:
    stdio.h? Wie kommst du denn da drauf?



  • SeppJ schrieb:

    Außerdem:
    stdio.h? Wie kommst du denn da drauf?

    vermutlich für die Funktion getchar()


  • Mod

    BigNeal schrieb:

    SeppJ schrieb:

    Außerdem:
    stdio.h? Wie kommst du denn da drauf?

    vermutlich für die Funktion getchar()

    Komisch, bei mir ist die in cstdio 😉


Anmelden zum Antworten