C++ - "Funktion nimmt keine 0 Argumente." Behebung?

bormolino  12.12.2023, 17:31

Warum packst du die Funktionsdefinitionen nicht in eine Header Datei?

Z0NNEBL0EM 
Fragesteller
 13.12.2023, 13:37

Joah, hätte ich machen können, wobei ich noch im C++ Lernprozess bin und daher noch keine eigenen riesigen Programme schreibe, bei denen es sich anbietet, den Code aufzuteilen.

1 Antwort

Vom Fragesteller als hilfreich ausgezeichnet

Das geht, aber die delkaration über dem main muss hier gleich sein, also den Defaultwert enthalten!

In Deinem Fall hast Du ein mal den defaultwert und in der deklaration nicht!

Tatsächlich kommt der Defaultwert aus der deklaration und nicht aus der eigentlichen Funktion.

Ist die Funktion ihre eigene deklaration, steht also über dem main, dann funktioniert das natürlich da der optionale Parameter deklariert ist.

Und das geht nur in C++, bei C sind optionale Parameter nicht erlaubt!

In C++ wird die Funktion dann mit dem Defaultwert aus der Delkaration angesprungen. Die Funktion selber weiß ja nicht ob die den Defaultwert einsetzen muss oder nicht.

Woher ich das weiß:Berufserfahrung
Z0NNEBL0EM 
Fragesteller
 13.12.2023, 13:49

Hey, einen schönen Nachmittag dir! :)

Achsööö! Vielen herzlichen Dank für die Erklärung! Wusste ich nicht. Hab das dann gleich nach lesen deines super hilfreichen Beitrags probiert und das funktioniert super. Dachte erst, dass würde zu einer Überladung führen war doch nicht so.

Vielen vielen herzlichen Dank für deine Mühe, deinen super hilfreichen Beitrag und dir einen wunderschönen Tag. ;)

0
Commodore64  13.12.2023, 13:51

Zur Erklärung wie das aufrufen einer Funktion funktioniert.

Der Aufruf legt in der Reihenfolge in der die drin stehen die Variabeln auf einen Stack.

Die aufgerufene Funktion selber nimmt die in umgekehrter Reihenfolge vom Stack.

Die Funktion weiß nicht ob und was und wie auf den Stack gelegt wurde. Die nimmt nur Stur runter, auch wenn der Stack "ins Negative" gehen würde und irgendwelcher Müll gezogen wird und das Programm dann abstürzt weil der Stack kaputt ist.

Deswegen kann man bei C keine optionalen Parameter verwenden. Der Aufruf muss die exakte Anzahl an Bytes auf den Stack legen und die Funktion die gleiche Anzahl raus holen.

Bei C++ ist es erlaubt, optionale Werte zu haben. Hier wird dann beim Aufruf der Default wert genommen und in den STack gelegt damit die korrekte Anzahl von der Funktion genommen werden kann ohne einen Absturz aus zu lösen.

Deswegen muss der Aufruf den optionalen Wert kennen, die Funktion weiß davon gar nichts, die ist nicht in der Lage fest zu stellen ob und was fehlt!

0