Dostupnost arraye napříč unity. – Delphi – Fórum – Programujte.com
 x   TIP: Přetáhni ikonu na hlavní panel pro připnutí webu
Reklama
Reklama

Dostupnost arraye napříč unity. – Delphi – Fórum – Programujte.comDostupnost arraye napříč unity. – Delphi – Fórum – Programujte.com

 

Hledá se programátor! Plat 1 800 € + bonusy (firma Boxmol.com)
Navara0
Newbie
19. 8. 2014   #1
-
0
-

Zdravím, prosím o popostrčení v následujícím problému: mám aplikaci, která zpracovává soubory zůzných druhů a pro přehlednost zdrojáku mám procedury, proměnné, vlastní struktury a pole těchto struktur, funkce atd. pro každý formát souboru v různých unitech (např. uvádělný U__ZdrojeRN2Archiv). Problém je s dostupností proměnných a polí napříč těmito Unity. Tam kde je unit spojen s formulářem (Main), tam proměnná globálně dostupná je. Tam kde ne - je problém. Podstatné části zdrojáku jde:

unit U__ZdrojeRN2Archiv; 

interface 

uses ComCtrls; //a tak dále... 

type TRN2Archiv = record 
  KompletZaznam: String; 
  ZacatekZpravy: String; 
  Obsah: String; 
end; 

type TZdrojeRN2Archiv = class 
  public 
    function PrekladHlavicky(Index: Integer): String; 
  end; 

var 
  ZdrojeRN2ARchiv: TZdrojeRN2Archiv; 
  Rn2Archiv: Array of TRN2Archiv; 

implementation 
  uses U_Main; //atd... 

function .... begin ....... end; 

end.


Pokus o práci s polem Rn2Archiv z Main (kterýžto Unit je spojen s hlavním formulářem aplikace):

unit U_Main; 

interface 
uses Windows; //atd... 

type TMain = class(TForm) 
  P_Nastroje: TPanel; //atd... 

  procedure B_NacistClick(Sender: TObject);//atd...
  end; 

var Main: TMain; //atd... 

implementation 

uses U__ZdrojeRN2Archiv, //atd... 

{$R *.dfm} 

procedure TMain.B_NacistClick(Sender: TObject); 
begin 
  SetLength(ZdrojeRn2Archiv.Rn2Archiv, 0); 
  //Nelze! ZdrojeRn2Archiv.Rn2Archiv je undeclared identifer! 
end; 

end.


Vložím-li v uniě U_ZdrojeRN2Archiv řádek "Rn2Archiv: Array of TRn2_Archiv;" do části Public, kompilátor to sice přežvýká ale jakmile se z kteréhokoliv místa ve vlastní unitě (U_ZdrojeRN2Archiv) nebo jiné (U_Main) pokusím pracovat s polem Rn2Archiv, (např: SetLength(ZdrojeRN2Archiv.Rn2Archiv, 0)); skončím na Access violation...

Kam mám tedy vložit deklaraci "RN2Archiv: Array of TRn2_Archiv", aby byla dostupná pro ostatní unity, bez ohledu na to, jsou-li spojené s formuláři či nikoliv...?

Děkuji, N.

Nahlásit jako SPAM
IP: 46.135.3.–
Reklama
Reklama
z
~ Anonymní uživatel
268 příspěvků
20. 8. 2014   #2
-
0
-

S Pascalem/Delphi už jsem dlouho nedělal, takže další ber jen jako tipy.

1. Pokud tam máš to pole takto:

var 
  Rn2Archiv: Array of TRN2Archiv;

Tak k němu přistupuješ takto:

Rn2Archiv

2. Pokud ho máš ve třídě takto: 

type TZdrojeRN2Archiv = class 
  public 
    Rn2Archiv: Array of TRN2Archiv;
  end; 

var 
  ZdrojeRN2ARchiv: TZdrojeRN2Archiv;

Tak k němu přistupuješ přes ten objekt takto:

ZdrojeRn2Archiv.Rn2Archiv

Možná tam máš obojí a různé části kódu pracují s různými proměnnými. A když se ti v dotazu podařilo napsat ještě TRn2_Archiv, tak to možná máš domíchané ještě víc.

3. Máš ten objekt inicializovaný? Nejsem si jistý, jak fungují konstruktory, ale myslím, že se musí volat explicitně.

Takže takto: 

var 
  ZdrojeRN2ARchiv: TZdrojeRN2Archiv.Create;

Nebo takto:

ZdrojeRN2ARchiv := TZdrojeRN2Archiv.Create;

Až pak bude ten objekt (a to pole v něm) použitelný.

Nahlásit jako SPAM
IP: 213.211.51.–
JoDiK
~ Anonymní uživatel
981 příspěvků
20. 8. 2014   #3
-
0
-

#1 Navara
Zřejmě máš poněkud chaos v pojmech a filozofii objektů.

Takže místo otázky "Kam mám tedy vložit deklaraci "RN2Archiv: Array of TRn2_Archiv"" si spíše polož tyto otázky: Rozumím objektově orientovanému programování? Chápu význam zapouzdření, dědičnosti a jiných "objektových" záležitostí? Rozlišuju globální proměnné a data objektů? Pokud jsou tvoje odpovědi samé ne, zkus si nejdřív nastudovat teorii k objektům.

Protože až tu problematiku pochopíš, dojde ti nesmyslnost tvé otázky...

Nahlásit jako SPAM
IP: 88.103.236.–
Zjistit počet nových příspěvků

Přidej příspěvek

Toto téma je starší jak čtvrt roku – přidej svůj příspěvek jen tehdy, máš-li k tématu opravdu co říct!

Ano, opravdu chci reagovat → zobrazí formulář pro přidání příspěvku

×Vložení zdrojáku

×Vložení obrázku

Vložit URL obrázku Vybrat obrázek na disku
Vlož URL adresu obrázku:
Klikni a vyber obrázek z počítače:

×Vložení videa

Aktuálně jsou podporována videa ze serverů YouTube, Vimeo a Dailymotion.
×
 
Podporujeme Gravatara.
Zadej URL adresu Avatara (40 x 40 px) nebo emailovou adresu pro použití Gravatara.
Email nikam neukládáme, po získání Gravatara je zahozen.
-
Pravidla pro psaní příspěvků, používej diakritiku. ENTER pro nový odstavec, SHIFT + ENTER pro nový řádek.
Sledovat nové příspěvky (pouze pro přihlášené)
Sleduj vlákno a v případě přidání nového příspěvku o tom budeš vědět mezi prvními.
Reaguješ na příspěvek:

Uživatelé prohlížející si toto vlákno

Uživatelé on-line: 0 registrovaných, 17 hostů

 

Hostujeme u Českého hostingu       ISSN 1801-1586       ⇡ Nahoru Webtea.cz logo © 20032016 Programujte.com
Zasadilo a pěstuje Webtea.cz, šéfredaktor Lukáš Churý