Array típusok

Array típusok.

fogadtatás
# xA0 A kérdés a következő:
# xA0; itt van az én típusom:
# xA0; TByteArray = Byte tömb;
# xA0; És a függvények:

№1
TForm1.SomeFunc eljárás (var A: TByteArray);
kezdődik
# xA0; SetLength (A, 20);
végén;

eljárás TForm1.SomeFunc2;
var
# xA0; A: Byte tömb;
kezdődik
# xA0; SomeFunc (A);
végén;

A fordító esküszik:
[Hiba] Unit1.pas (38): A tényleges és formális var paraméterek típusainak azonosnak kell lenniük

№2
TForm1.SomeFunc eljárás (var A: Byte tömb);
kezdődik
# xA0; SetLength (A, 20);
végén;

mi:
[Hiba] Unit1.pas (31): Nem kompatibilis típusok

Kérdés, hogyan okozhat funkciót a SomeFunc (A); az 1. példából. És kijelenteni
A: TByteArray; lehetetlen.

És egy másik kérdés az, hogy miért nem hívhatod a SetLength-ot egy Byte tömbre

Számos program létezik annak meghatározására, hogy a két objektum típusai egyenértékűek-e. A leggyakrabban használt két rendszer a típusok szerkezeti ekvivalenciája és a típusok névleges egyenértékűsége. A típusok szerkezeti egyenértékűségének megfelelően két objektum csak akkor egyenértékű, ha típusuk szerkezete megegyezik. A névleges egyenértékűség rendszerével összhangban két objektum egyenértékű, ha meghatározásuk egyfajta típusú nevet használ.

Objektum Pascal elfogadja a névleges egyenértékűséget.

ezért:

És írja be
> A: TByteArray; lehetetlen.

Nem lehetetlen, de szükséges.


> És egy másik kérdés az, hogy miért nem hívhatja a SetLength-ot egy tömbön
> byte tömb

És honnan szerezted, hogy nem tudsz? Tudod!


> És egy másik kérdés az, hogy miért nem hívhatja a SetLength-ot egy tömbön
> byte tömb

eljárás TForm1.SomeFunc2;
var
A: Byte tömb;
kezdődik
SomeFunc (TByteArray (A));
végén;

Nos, megpróbáltam. Csak egy példa nem túl helyes.
Itt van a helyzetem:
TForm1.SomeFunc eljárás (A: byte tömb);
kezdődik
# xA0; SomFunc (TByteArray (A));
végén;

TForm1.SomFunc eljárás (A: TByteArray);
kezdődik
# xA0; SetLength (A, 10);
végén;

Ha A egy lok változó, akkor az öntöttek segítettek. És ha igen, akkor
# xA0; [Hiba] Unit1.pas (30): Érvénytelen írásmód


> És egy másik kérdés az, hogy miért nem hívhatja a SetLength-ot egy tömbön
> byte tömb

És honnan szerezted, hogy nem tudsz? Tudod!

Nos, hogyan teheted?
[Hiba] Unit1.pas (31): Nem kompatibilis típusok

Általánosan kívánatos lenne az ilyen típusú TByteArray megszabadulni.


És írja be
> A: TByteArray; lehetetlen.

Nem lehetetlen, de szükséges.

Ez lehetetlen, mert nem akarom, hogy a modulok valamilyen extrém típust használjanak. Ő írta a modult, és egyedül van - nagyon praktikus. Ezért még mindig olyan modult kell létrehoznunk, ahol az ilyen típusúak kötelesek mindenhol csatlakozni.

Két kérdésre - miért nem lehet SetLengtht okozni a Byte tömbhöz

Mivel ebben az esetben a paraméter nem dinamikus tömb, hanem nyitott (Open Array Parameters)

Az első - nem látom az okokat, hogy minden esetben ne használd az Ön által előzetesen kialakított dyin típusát. sor

Mivel ebben az esetben a paraméter nem dinamikus tömb, hanem nyitott (Open Array Parameters)

Látom. Azok át tudják adni és stat tömböt.

> Tudod átadni és stat array.
Igen, sőt építsd fel néhányFunc-ot ([1,2,3])

Világos. Köszönöm mindenkinek :)

Kapcsolódó cikkek