z czym wywolac konstruktor?? (Delphi7)

0

problem wyglada tak:

Mam 3 klasy realizujące "mechanizm wewnętrzny" programu - nie widać ich.
Konkretniej:

type TVector = class(TObject)
      private
      public
        constructor Create(AOwner: TComponent);
        procedure czysc; //zerowanie wektora
      end;

  implementation

  constructor TVector.Create(AOwner: TComponent);
   begin
      czysc;
   end; //Create;

z wektorow korzysta kolejna klasa:

type ISystem = array of TVector;

       TSI = class(TObject)
        private

         klasy : ISystem;
         ilosc : integer; // ilosc klas

         procedure przedluz; //przedluzenie tablicy klas

      public
       constructor Create(AOwner: TComponent);
      end;

implementation

constructor TSI.Create(AOwner: TComponent);
begin
 ilosc := 0;
 przedluz;
end; //Create;

a z niej nastepna:

type TInterSI = class(TObject)
      private
        system : TSI;

      public
       constructor Create(AOwner: TComponent);

        procedure wczytaj(c:char; AOwner: TComponent); //wczytanie danych do Systemu 
      end;

implementation

constructor TInterSI.Create(AOwner: TComponent);
begin
  system.Create(AOwner);
  wczytaj('a', AOwner);
end; //Create;

Do tego momentu wszystko kompilowało się bez problemu.

Obiekt klasy TInterSI ma byc tworzony na samym poczatku dzialania programu, wiec w formularzu glownym mam:

procedure TFormGlowny.FormCreate(Sender: TObject);
var o:TComponent;
begin
  SysInf.Create(o);
end; //FormCreate

Analogicznej konstrukcji używałam już kiedyś w Delphi 3, tam to działało, a teraz mam
"exception with message 'Access Violation' "
przy kazdej probie uruchomienia.

Wywala sie w konstruktorze klasy TInterSI.

Próbowałam wywoływać SysInf.Create z self i nil - efekt ten sam.

To z czym wywołać ten konstruktor?

0

Hej

  • po pierwsze skoro Owner do niczego nie jest ci potrzebny to poco go używasz
  • a po drugie nie tak się tworzy obiekty
procedure TCostam.Procedura;
var z : TTwojTyp;
begin
  z := TTwojTyp.Create(Jakies,Zmienne); // o ile sa potrzebne
  // i dopiero teraz
  z.JakasTwojaMetoda(Z,Parametrem);
end; 
0

Dzieki Deel
okazuje sie ze problem byl zupelnie gdzie indziej :)

1 użytkowników online, w tym zalogowanych: 0, gości: 1