global変数の宣言順序について

解決


nanioda  2010-01-13 23:48:04  No: 36960

以下をglobal変数で宣言して、
  Form1       :TForm1;
  dateN       :Tdate;
  strDate     :string;
  Zaikei      :array[0..12]  of string;
  c           :array[0..21]  of Tcolor;
  Sg          :array[0..12]  of TStringGrid;
------
procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
  For i:=1 to 12 do Sg[i]:=findcomponent('StringGrid'+inttostr(i)) as TStringGrid;
  shokika;
end;
------
procedure TForm1.Shokika;
begin
  Sg[1].colcount:=2;
  ・
  ・
end;
------
と記述し、実行しますとエラーになります。

global変数の宣言順を変更して、
  Form1       :TForm1;
  Sg          :array[0..12]  of TStringGrid;
  dateN       :Tdate;
  strDate     :string;
  Zaikei      :array[0..12]  of string;
  c           :array[0..21]  of Tcolor;
------
と記述しますとOKでした。

global変数の宣言順序になにかルールがあるのでしょうか?
(WinXp,D7-pro)


Ru  2010-01-14 00:15:48  No: 36961

最初の記述でエラーでませんでした。
どのようなエラーが出ていますか?
(WinXp SP2,D7-Enterprise)

unit Unit1;

interface

uses
  Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
  Dialogs, Grids;

type
  TForm1 = class(TForm)
    procedure FormCreate(Sender: TObject);

  private
    { Private 宣言 }
    procedure Shokika;
  public
    { Public 宣言 }
  end;

var
  Form1: TForm1;
  dateN       :Tdate;
  strDate     :string;
  Zaikei      :array[0..12]  of string;
  c           :array[0..21]  of Tcolor;
  Sg          :array[0..12]  of TStringGrid;
implementation

{$R *.dfm}

procedure TForm1.FormCreate(Sender: TObject);
var i:integer;
begin
  For i:=1 to 12 do Sg[i]:=findcomponent('StringGrid'+inttostr(i)) as TStringGrid;
  shokika;

end;

procedure TForm1.Shokika;
begin
  Sg[1].colcount:=2;

end;

end.


nanioda  2010-01-14 01:14:31  No: 36962

Ru様、検証ありがとうございました。
原因は宣言順序とは無関係でした(m--m)

Shokika procedure の中で、c[0..21]の読み込みがあるのですが、
配列が21を超える場合があってのエラーでした。

procedure TForm1.Shokika;
begin
  Sg[1].colcount:=2;
  Colorling(c);
end;

投稿者の不注意によりご迷惑をかけましたことを深くお詫び致します。


※返信する前に利用規約をご確認ください。

※Google reCAPTCHA認証からCloudflare Turnstile認証へ変更しました。






  このエントリーをはてなブックマークに追加