类型转换异常问题……(20分)

Z

ZRWeng

Unregistered / Unconfirmed
GUEST, unregistred user!
定义了这样一个记录:
TInfo=Record
ID:String[255]

UserObj:Tuser
//用户对象
end;
PInfo=^TInfo;

InfoList:TList
//存放Info记录对象

当使用PInfo(InfoList.Items).UserObj.fn()
调用UserObj的一个方法fn出现 类型转换异常,强行退出

该如何转换才安全?
 
不难吧?还是我描述的不清楚?
 
编译通过了证明解析对了,我想问题还可能在方法fn里吧
 
但我单步调试待要跟踪进这个fn的时候就出现异常!
 
没有其他的办法了吗?
 
PInfo(InfoList.Items)^.UserObj.fn()
 
UserObj创建没有?
 
PInfo(InfoList.Items).UserObj.fn()
改为
TInfo(InfoList.Items).UserObj.fn()
 
to Kisber
出错照旧 :(
to pihome
UserObj对象是在某一事件触发时创建,先于该函数调用
创建对象后,
var
tmpInf:pInfo;
begin
tmpInf:=new(PInfo);
tmpInf.ID:=xxx
tmpInf.userObj:=xxx
InfoList.add(tmpInf)
//在列表中保存该对象
通过跟踪是可一看到UserObj实例存在。
 
to jianping0
那我添加到InfoList的时候是否也应该将
tmpInfo:pInfo
改为tmpInfo:TInfo
 
粗试TInfo(InfoList.Items).UserObj.fn()不能转换,编译不通过
 
PInfo(InfoList.Items).UserObj.fn()是对的,
应该是你的InfoList.Items类的UserObj没有初始化
 
to 张无忌
可UserObj对象有创建呀,并tmpInf.UserObj引用了该对象
添加到InfList内存列表中
var
UserObj:TUser;
begin
UserObj:=TUser.create(初始化值);
tmpInf.userObj:=UserObj;
InfoList.add(tmpInf)


InfoList:TList
声明在Private中,方法的调用只在一个Unit中

 
通过跟踪查看UserObj实例的初始值是有的。
 
哈哈,我明白了,

TInfo=Record
ID:array[0..255]of char
//按我写的修改,绝对就问题了!!!!!
UserObj:Tuser
//用户对象
end;
原因很简单。。。一会我再告诉你
 
//按我写的修改,绝对就问题了!!!!!
有问题还是没问题呀,哈哈,我试先,
原因嘛,热切期待……中
 
还没搞定,不过现在出现非法指针操作错误,
var
sId:string;
begin
...
if (PInfo(InfoList.item).id=sId) then //到这里出错
PInfo(InfoList.Items).UserObj.fn()
 
PInfo(InfoList.item).id=sId不能这么比较的
 
虽然我写个函数转换为字符串比较,
可是执行到 PInfo(InfoList.Items).UserObj.fn()
还是会出现project server.exe raise Exception Class EConvertError With Message''
:(
 
我写了一个一样的,没有什么问题啊,呵呵
 

Similar threads

S
回复
0
查看
3K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
2K
SUNSTONE的Delphi笔记
S
S
回复
0
查看
384
swish
S
I
回复
0
查看
662
import
I
顶部 底部