あけまして、おめでとうございます。
今年もよろしくお願いします。
(⌒▽⌒)/゜・:*【ネ兄】*:・゜\(⌒▽⌒)
--------------------
クラスを使ってプログラムを作っているのですが、うまくいきません。
クラスのインスタンスの値(?)が0になってるみたいです。
テスト用に次のようにしたんですが、ShowMessageで0が表示されます。
(コンストラクタのところでは正常に表示されます)
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
TCheckText = class(TObject)
Fnum: Integer;
Findic:Array of String;
constructor Create(indictxt: TStringList); // コンストラクタ
function Checkind(text:String):String;
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
Constructor TCheckText.Create(indictxt: TStringList);//配列に置き換え
var
Findic:array of String;
i,len_array,Fnum:Integer;
begin
len_array := indictxt.Count;
SetLength(Findic,len_array);
Fnum := len_array div 5;
for i := 0 to len_array - 1 do
begin
Findic[i] := indictxt.Strings[i];
end;
ShowMessage(IntToStr(Fnum));//ここでは正常に表示される
end;
//----------------------------------
ボタンで以下のプログラムを実行
procedure TForm1.test();
var
ind0:TStringList;
indic0:TCheckText;
filename_ind0:string;
i:Integer;
begin
ind0 := TStringList.Create;
filename_ind0 := '\いろいろ.txt';//数百行
ind0.LoadFromFile(filename_ind0);
indic0:=TCheckText.Create(ind0);
ShowMessage(IntToStr(indic0.Fnum));// 0と表示される
end;
コンストラクタの
>var
> Findic:array of String;
> i,len_array,Fnum:Integer;
にある Fnum を 削除したらどうなりますか?
>var
> Findic:array of String;
> i,len_array,Fnum:Integer;
Findic も削除したほうがよいかも・・・
igyさん、素早い回答ありがとうございます。
>にある Fnum を 削除したらどうなりますか?
>Findic も削除したほうがよいかも・・・
ううっ、そうするとCreateだけになってしまうんじゃないんですか?
初期化(データセット)も同時にしたいんですけど、無理なんでしょうか?
> TCheckText = class(TObject)
> Fnum: Integer;
> Findic:Array of String;
で、 FnumとFindicがあるので、
コンストラクタ内の変数の
>var
> Findic:array of String;
> i,len_array,Fnum:Integer;
のうち、 FnumとFindicを削除して
var
i,len_array:Integer;
にすればいいのかな、と思ったのですが。
新年明けましておめでとうございます
フィールドの
TCheckText = class(TObject)
Fnum: Integer;//ここ
constructor TCheckText.Create( indictxt: TStringList);
var
Findic:array of String;
i,len_array,Fnum:Integer;//Fnum ここ
begin
len_array := indictxt.Count;
SetLength(Findic,len_array);
Fnum := len_array div 5;
self.Fnum:=Fnum; 追加
フィールドの名前とローカル変数の名前の衝突しているので
ローカル変数が優先されます
どうしても同じ名前にした場合は「追加」するとうまくいくと思います
※同名を使うとバグの原因となりますのでプロパティにするなり
プログラムの構造を検討したほうが良いかも
うまくいきました。
igyさん、マッコさんありがとうございます。
これで2,3日悩んでいました。
ツイート | ![]() |