Konstantes Objekt kann nicht als var-Parameter übergeben werden

7

Dies ist der Fehlercode ..

%Vor%

Vollständige Prozedur

%Vor%

Mehrfachfunktion

%Vor%

und konjugieren

%Vor%

und bei Bedarf TQuaternion

%Vor%

irgendeine Idee, warum ich diesen Fehler bekomme und wie man es behebt?

    
Glen Morse 18.08.2013, 03:45
quelle

2 Antworten

13

Die Antwort auf die Frage, die Sie gestellt haben, lautet, dass die Parameter für mult const sein sollten. Sie ändern sie nicht (und Sie sollten nicht), also machen Sie sie konstant. Dann kompiliert sich Ihr Code.

In ähnlicher Weise ist es für Conjugate eine schlechte Form, ihren Eingabeparameter zu ändern. Das macht die Funktion schrecklich zu benutzen. Mach das nicht.

Betrachten Sie diese Zeile:

%Vor%

Da conjugate temp modifiziert, sollten Sie besser hoffen, dass der Aufruf zum Konjugieren nach der anderen Verwendung von temp erfolgt. Die Sprache gibt keine solche Garantie. Also, Daumen drücken!

Einer der Grundsätze, die es mit arithmetischem Code zu beachten gilt, ist, dass Eingabeparameter / Operanden niemals geändert werden dürfen und dass Funktionen immer neue -Werte zurückgeben. Folgen Sie diesem Prinzip und Sie werden niemals in die oben erwähnte Falle fallen. Siehe den zweiten Teil meiner Antwort für eine Illustration.

Der Code funktioniert jedoch auch mit diesen Änderungen nicht, da Sie keine Instanzen der TQuaternion-Klasse instanziieren. Bist du sicher, dass es kein Rekord ist?

Der echte Fortschritt wird kommen, wenn Sie einen guten Quaternion-Typ erstellen. Dies sollte ein Werttyp sein, da arithmetische Operationen aus verschiedenen Gründen besser für Werttypen geeignet sind.

Im modernen Delphi möchten Sie einen Datensatz mit Operatoren verwenden. Hier ist ein Geschmack von dem, was Sie brauchen, bereit zu erweitern, wie Sie brauchen.

%Vor%

Mit diesem Typ wird Ihr Multiplikationsaufruf:

%Vor%

Sie werden sicherlich mehr Operatoren und Hilfsfunktionen für diesen Typ schreiben wollen.

Es ist wirklich wichtig, die arithmetischen Funktionen in diesen Typ und außerhalb Ihrer Form zu verschieben. Verwenden Sie Ihre High-Level-GUI-Formularklasse nicht zum Implementieren von Low-Level-Arithmetik.

Ein letzter Ratschlag. Ihr Code hat wiederholt falsche var-Parameter verwendet. Ich schlage vor, Sie behandeln Var-Parameter als Dinge, die vermieden werden sollen. Versuchen Sie, Code ohne sie zu schreiben, wenn möglich.

    
David Heffernan 18.08.2013, 06:44
quelle
5

Die mult -Methode deklariert den A -Parameter als var , so dass Sie eine Variable an die Methode übergeben müssen, um so zu funktionieren.

%Vor%     
RRUZ 18.08.2013 03:59
quelle

Tags und Links