Entwickler-Ecke
Delphi Language (Object-Pascal) / CLX - kleines problem mit der copy function
buSC - Sa 13.03.10 16:55
Titel: kleines problem mit der copy function
Hallo
ich habe mal ein 4*3 array .
ich will jeweils eine zeile dieses Array lesen und in array "arr" speichern ,warum klappt die copy function hier nicht ich bekomme den Fehler :"incompatible types"
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9: 10: 11: 12:
| var mat:array of array of Shortint; i,j:integer; arr:array of Shortint; begin SetLength(mat,4,3); setlength(arr,length(mat[0])); for i:= 1 to 4 do for j:=1 to 3 do mat[i-1,j-1]:=j; arr:=copy(mat[1]);end; |
Danke im Voraus
Moderiert von
Narses: Delphi-Tags hinzugefügt
ALF - Sa 13.03.10 17:18
Hi, versuch mal mit arr[0] oder so. :wink:
Gruss Alf
Xentar - Sa 13.03.10 17:41
Copy ist doch eigentlich nur für Strings gedacht, um da einzelne Zeichen rauszukopieren?
Such mal nach MemCopy oder so ähnlich.
Edit: Ähhh. oder versuch einfach mal Arr := mat[1];
buSC - Sa 13.03.10 18:03
ertmal Danke sehr an die Freunde ,die versucht haben mich zu antworten
ja ich habe arr:=mat[1] , arr[0]:=mat[1] ausprobiert und nicht geklappt.
uebrigens habe ich kein memcopy function gefunden.
:)
ALF - Sa 13.03.10 18:12
ich glaube es muss so sein,
arr := copy(mat[1,1])
mat ist ein mehrdimensionales array und arr ein eindimensionales!
Gruss Alf
buSC - Sa 13.03.10 18:21
danke an alf fuer die Antwort
ich glaube nicht dass es klappt,weil mat[1,1] ein nummer ist waehrend "arr" ein array ist.
aber kann ich es mal ausprobieren. :)
ALF - Sa 13.03.10 18:47
Du willst doch den inhalt von mat[0] in ein anderes array copieren!?
mat[0] hat aber noch 3 felder, mat[0,0] mat[0,1] mat[0,2] z.b
Um das zu copieren muss das andere Array auch mehrdimensional sein!
also vom gleichen Typ!
Ansonsten geht es glaube nur mit arr[0]:= mat[0,0], arr[1]:= mat[0,1] usw.
Gruss Alf
P.S hoffe jetzt nix falsch gesagt zu haben?
Xentar - Sa 13.03.10 18:55
ALF hat folgendes geschrieben : |
Du willst doch den inhalt von mat[0] in ein anderes array copieren!?
mat[0] hat aber noch 3 felder, mat[0,0] mat[0,1] mat[0,2] z.b
Um das zu copieren muss das andere Array auch mehrdimensional sein! |
Ne, eben nicht. Er möchte die n-te Dimension von mat in ein anderes Array umkopieren, warum auch immer.
Also, neuer Vorschlag:
Du definierst im Interface einen neuen Typen.
Delphi-Quelltext
1: 2:
| type TMyShortIntArray = array of Shortint; |
Dann baust du deine Deklarationen um:
Delphi-Quelltext
1: 2: 3: 4:
| var mat:array of TMyShortIntArray; i,j: integer; arr: TMyShortIntArray; |
und DANN kannst du das auch zuweisen ;)
arr := mat[0];
ALF - Sa 13.03.10 19:11
Sollte ich sein Code so Falsch verstanden haben?
sein Code:
Delphi-Quelltext
1: 2: 3: 4: 5: 6: 7: 8: 9:
| var mat : array of array of Shortint; i,j : integer; arr : array of Shortint; .... ....
arr := copy(mat[1]); |
sollte ich so falsch liegen dann sorry :oops:
Gruss Alf
Xentar - Sa 13.03.10 19:32
mat[1,1] ist vom Typ Shortint, das kannst du nicht mehr einem array zuweisen. (höchstens an eine bestimmtes Stelle)
mat[1] wäre schon korrekt, aber der Compiler kapiert nicht, dass "array of Shortint" und "array of Shortint" das selbe ist. Deswegen muss man da einen Typen für definieren, von dem beide abstammen. Dann würde das auch wieder mit arr:=copy(mat[1]); funktionieren.
ALF - Sa 13.03.10 23:45
Xentar alles richtig was Du sagts, habs mal durchgemacht :wink:
Aber trotzdem sehr irreführend :gruebel:
Delphi-Quelltext
1: 2:
| mat : array of array of Shortint; arr : array of Shortint; |
Danke hab was gelernt :D
Sorry
buSC für meine falschen infos :oops:
Gruss Alf
buSC - So 14.03.10 17:31
vielen Dank an die Beide Freunde Alf und Xentar fuer ihre Antworte.
an Alf: kein Problem, es ist mir wichtig ,dass du versucht hast mich zu beantworten :)
Entwickler-Ecke.de based on phpBB
Copyright 2002 - 2011 by Tino Teuber, Copyright 2011 - 2026 by Christian Stelzmann Alle Rechte vorbehalten.
Alle Beiträge stammen von dritten Personen und dürfen geltendes Recht nicht verletzen.
Entwickler-Ecke und die zugehörigen Webseiten distanzieren sich ausdrücklich von Fremdinhalten jeglicher Art!