delphi高手留步!变量不能被初始化是什么意思?

procedureTForm1.ComboBox1Click(Sender:TObject);varnum:integer;ch:string;str:TResource... procedure TForm1.ComboBox1Click(Sender: TObject);
var
num:integer;
ch:string;
str:TResourceStream;
begin
ch:=inttostr(num+1);
if combobox1.Itemindex=num then
str:=TResourceStream.Create(HInstance,'st(ch)','text');
form1.combobox2.Items.LoadFromStream(str);

如此已能通过RUN编译,但点击其中一个功能时,出现:variable'num'might not have been initializaed.variable'str'might not have been initializaed.原因是什么?怎么解决?
去除两个变量“num”和“ch”。:var str:TResourceStream;
begin try
if combobox1.Itemindex=0 then
begin
str:=TResourceStream.Create(HInstance,'st1','text');
combobox2.Items.LoadFromStream(str);
end;
finally
str.Free ;可通过编译实现功能。若把Itemindex=0和st1改变对应的数目,每次也能通过。但每次都说str没被初始化。请高手指点!
----------------------------------------------------------------------------------
初始化问题解决。若把str:=...放于try前,出现错误消息:value assigned to 'str'never used.有QQ吗?MYQQ:729851670 MYE-MAIL:sghff110@163.com
展开
 我来答
chenyayuzx
2007-10-07 · TA获得超过312个赞
知道小有建树答主
回答量:305
采纳率:0%
帮助的人:340万
展开全部
num 最早在哪里赋值的?

就你给出来的代码看,除此之外没发现什么地方不对,本来num也可以不用先赋值的,一样能编译通过。
==================================================
明白了,你的num没有初始值,后面条件判断的时候combobox1.Itemindex一定不等于num,导致str没有Create。
===============================================
补充:关于str的代码应该这样写更安全:
str := TResourceStream.Create(HInstance,'st(ch)','text');
try
if combobox1.Itemindex=num then
begin
combobox2.Items.LoadFromStream(str);
......
end;
finally
str.Free;
end;

还有,程序中永远不要用Form1.Combobox2之类的,即使要引用Form1本身,也应该使用Self来代替!

============================================
补充:这是说你的资源文件中没有找到'st(ch)'这个资源。
不知道你的代码的来源,估计你还有东西你没搞全,或交给你的人没给你,比如资源文件
============================================
再次补充:
str:=TResourceStream.Create(HInstance,'st1','text');
必须在try之前!
否则由于 if 条件判断,很可能str根本不创建,之后的使用和Free都会出错!
放到str之前就不会有错了。
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式