Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.
Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin. Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Ikkita unit ulashda F2047 Circular unit reference to 'Unit1' xatosi

+6 ovoz
83 marta ko‘rilgan
so‘radi 26 dekabr, 16 oakrom (389 bal)
tahrirlandi 24 fevral, 17 Saidolim

(Delphida) Ikkita unit modul tuzyapman (Unit1 va Unit2), ikkalasi bir birining funksiya, prosedura va klasslaridan foydalanishi kerak. Unit2 ning interface bo'limida Unit1 ko'rsatilgan, xuddi shunday Unit1 ning interface bo'limida Unit2 ni ko'rsatganimda kompilyator "F2047 Circular unit reference to 'Unit1'" xatosini beryapti. Bu xato Unit1 ni Unit2 ning implementation bo'limida ko'rsatish bilan yechilyapti, lekin nimaga ikkalasini bir birining interface bo'limida ko'rsatib bo'lmaydi degan savol tug'ilyapti. Bunday xolatda kompilyator qanday muammoga duch kelyapti? 

1 ta javob

+3 ovoz
javob berdi 24 fevral, 17 DelphiGuru (823 bal)

Kompilyator modullarni kompilyatsiya qilish orderini bilmagani uchun shunaqa xatolik beradi.

Bir va undan ortiq unitlar o'z interfeysida bir biridan foydalanishadi. kompilyator katta unit boshqasini ishlata olishi uchun oldindan ularning interfeysi qismlarini  tarjima qilishi aniq.Kompilyator interfeys qismlarini kompliyatsiya qilish tartibini topa olishi kerak.

Modullarni e'lon qilishdan oldin, shu modullar bir-biriga bog'lanishi shartmi yoki yo'qmi shuni aniqlab olish kerak. Yoki shu interface da e'lon qilingan modulni implementation ko'chirish imkoni bordir?!

unit A;
interface
uses B;           (*A, B unitni ishlatadi, va B, A unitni ishlatadi*)
implementation
end.

unit B;
interface
uses A;
implementation
end.

Xatolik sodir bo'layotganining sababi, unitlar bir-birining interface ida mavjud bo'lganligi.

Buni ikkita yo'l bilan to'g'irlash mumkin  :

  1. Siz bitta modulni ichida bir-biriga tegishli classlarni qo'yishingiz mumkin.
  2. Yoki shu modullarni to'qnashadigan joylarini general type lar bilan, misol uchun TObject, Pointer lar bilan izlari orqali boshqarishingiz mumkin. http://stackoverflow.com/questions/14625644/delphi-type-casting

Oddiygina move qilish : 

unit A;
interface
uses B;          {Kompilyatsiya ketma-ketligi: B.interface, A, B.implementation}
implementation
end.

unit B;
interface
implementation
uses A;          {A unit implementationga o'tkazilgan}
end.

Assalomu alaykum, yordam.uz saytimizga xush kelibsiz.

Bu saytda o`zingizni qiziqtirgan savollarga javob olishingiz va o`z sohangiz bo`yicha savollarga javob berishingiz mumkin.

Bizning Oilamizga a'zo bo`lganingiz uchun chuqur Minnatdorchilik bildiramiz !!!

Telegram kanal YordamUzRss

...