Wurzeln in Pascal?

3 Antworten

Dein Programm hat den gleichen Namen wie dir Funktion sqrt(r).

Beim Aufruf von sqrt erwartet nun der Compiler, das Sqrt ein Qualifzierer auf eine Programm/Unit Sqrt ist. (Sqrt.irgendwas). ...aber da kommt kein Punkt... sondern eine Klammer.

Wenn es Namengleichheiten gibt, musst den Aufruf einer Variable/Funktion etc. mit dem Namen der Unit qualifizieren, in welcher diese definiert ist.

c := System.Sqrt(r);

...dann klappt es auch. (Besser ist es jedoch Namengleichheiten zu vermeiden)

Ich glaube es liegt daran, dass das Programm auch sqrt heißt. Ich würde das sqrt in Zeile 4 umbenennen.

Anton6966 
Fragesteller
 10.04.2022, 00:35

Ne, leider nicht, aber danke

0
Erzesel  10.04.2022, 09:37
@Mathmaninoff, UserMod Light

Wenn das Programm/Unit den gleichen Namen wie eine Funktion/Variable in einer eingebunden unit hat, gibt es Missverständnisse.

Dem könnte man aus dem Weg gehen, wenn man prinzipiell qualifiziert Aufruft.

Unitname.VarName, Unitname.FuncName() ....

Macht bloß keiner... (auch wenn es sinnvoll ist, denn überschreiben von Methoden ist auch in Pascal zulässig und man weiß nie was in Nutzerdefinierten Units für Namen definiert sein könnten)

Die Unit System muss nicht mal explizit eingebunden werden, deshalb hat das bei Sqrt(r) nichtmal jemand auf dem Schirm...

2

Du must noch die uses Math implementieren.

Woher ich das weiß:Studium / Ausbildung
Erzesel  10.04.2022, 09:52

Käse ... sqrt(r) ist in der Unit System implementiert und die wird immer implizit eingebunden.

Das wahre Problem ist, das niemand qualifizierte Namen verwendet... (üble Unart, solange es modulare Programmiersprachen gibt. ...und seit Ewigkeiten wird diese als normal angesehen...)

2