Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Sonstige Fragen zu Delphi (https://www.delphipraxis.net/19-sonstige-fragen-zu-delphi/)
-   -   Delphi Array über Funtion übergeben (https://www.delphipraxis.net/90368-array-ueber-funtion-uebergeben.html)

DoktorD 16. Apr 2007 09:30


Array über Funtion übergeben
 
Hi. Ich möchte aus einer Klasse mit einer Funktion Parameter (z.B. Arrays) an eine externe Klasse übergeben.

Hier meine Deklaration.
Delphi-Quellcode:
type
  CMessroutinen = class(CKALResource)
  private
    m_ParameterA  : array[1..7] of Double;
    m_ParameterB  : array[1..7] of Double;
    m_ParameterR0  : array[1..7] of Double;
    m_ThType1      : String;
    m_ThType2      : String;
    m_ThType3      : String;
    m_PLC         : Integer;
    m_Messzyklus  : Integer;
    m_Toleranz    : Double;
Alle Parameter haben dann einen Wert zugewiesen bekommen. Nun möchte ich diese mit einer Funktion übergeben:

Delphi-Quellcode:
function CMessroutinen.ParameterUebergeben(var ParameterA, ParameterB,
  ParameterR0:array of Double; var ThType1, ThType2, ThType3:String;
  var Toleranz:Double; var Messzyklus, PLC:Integer): boolean;
begin
  ParameterA := m_ParameterA; //Hier kommt der Fehler E2008 : Inkompatible Typen
  ParameterB := m_ParameterB; //Hier kommt der Fehler E2008 : Inkompatible Typen
  ParameterR0:= m_ParameterR0; //Hier kommt der Fehler E2008 : Inkompatible Typen
  ThType1    := m_ThType1;
  ThType2    := m_ThType2;
  ThType3    := m_ThType3;
  Toleranz  := m_Toleranz;
  Messzyklus := m_Messzyklus;
  PLC       := m_PLC;

  result := true;
end;
Wieso kann ich die Array nicht übergeben?

Luckie 16. Apr 2007 09:34

Re: Array über Funtion übergeben
 
Du musst dir einen eigenen Typen deklarieren:
Delphi-Quellcode:
type
  TDoubleArray = array of Double;

var
  MyDblArray: array[0..9] of TDoubleArray;

DoktorD 16. Apr 2007 10:04

Re: Array über Funtion übergeben
 
Danke für deine schnelle Antwort.

Aber auch damit zeigt er mir den Fehler an.

Habe eben nochmal ein bisschen im Forum gesucht und sowas gefunden

Delphi-Quellcode:
ParameterA := Copy(m_ParameterA, 0, 7);
Das geht aber auch nicht.

mkinzler 16. Apr 2007 10:16

Re: Array über Funtion übergeben
 
Hast du m_Parameter... auch auf den neuen Typ umgestellt?

shmia 16. Apr 2007 10:32

Re: Array über Funtion übergeben
 
Wenn du doch die Klasse CMessroutinen hast, warum willst du dann alle internen Felder mit einem Methodenaufruf übergeben ?
Überlicherweise wird bei der Objektorientierten Programmierung so gearbeitet, dass man Properties
"in alle Ruhe" der Reihe nach bestücken kann und dann irgendwelche Methoden aufruft.
Das alles darf auch in gemischter Reihenfolge stattfinden.
Zur Übergabe von grosseren Datenmenge bieten sich wiederum eigene Hilfsklassen an.

Wenn ich die Klasse CMessroutinen (der Name sollte übrigen nach Delphi-Konvention mit einem "T" beginnen) so anschaue, dann gehören ParameterA, ParameterB und ParameterR0 zusammen in einen Record oder Klasse.
Von diesem Record oder Klasse gibt es dann 7 Stück (es könnten aber auch mehr sein).

Man müsste aber den technischen Hintergrund kennen, um die Daten richtig in OO Datenstrukturen übersetzen zu können.

Kurz noch zu deiner Frage:
Es gibt statische und dynamische Arrays. Statische Arrays haben feste Grenzen, dynamische Arrays werden zur Laufzeit mit SetLength() dimensioniert.
Beide Arrayarten sind nicht zuweisungskompatibel!!

Also:
Delphi-Quellcode:
type
   TMessaray = array[1..7] of Double;

  CMessroutinen = class(CKALResource)
  private
    m_ParameterA  : TMessaray;
    m_ParameterB  : TMessaray;
    m_ParameterR0  : TMessaray;

function CMessroutinen.ParameterUebergeben(var ParameterA, ParameterB,
  ParameterR0:TMessaray;

Muetze1 16. Apr 2007 12:14

Re: Array über Funtion übergeben
 
Zitat:

Zitat von shmia
Kurz noch zu deiner Frage:
Es gibt statische und dynamische Arrays. Statische Arrays haben feste Grenzen, dynamische Arrays werden zur Laufzeit mit SetLength() dimensioniert.
Beide Arrayarten sind nicht zuweisungskompatibel!!

Aber klar doch. Ich kann ohne Probleme eine statisches Array einer Funktion mit einem dynamischen Array Parameter übergeben, so lange der Typ der Elemente gleich ist.

ABER: Es funktioniert nur in dieser einen Richtung.

DoktorD 16. Apr 2007 13:06

Re: Array über Funtion übergeben
 
Danke!!! Es klappt.


Alle Zeitangaben in WEZ +1. Es ist jetzt 20:22 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz