type Ta=class
id:string;
name:string;
end;
创建然后
var
xx:Ta;
begin
.......
编译时提示 xx 没初始化,程序运行时出错,
请问 delphi 怎样自定义一个结构?怎么创建、初始化?
8 个解决方案
#1
delphi的对象模型是基于引用的,而不是基于值的,所以应该这样:
var xx:Ta;
begin
xx := Ta.Create;
...
xx.Free; //to destroy
end;
var xx:Ta;
begin
xx := Ta.Create;
...
xx.Free; //to destroy
end;
#2
也就是说,var中定义的对象,只有内建类型(如:integer、string等),是基于值的,对于程序员自定义类型,都是基于引用的(就像是一个指针)。
#3
同意楼上的高见!你应在用的时候再创建一个实例。
#4
你写的是类,类的实例要通过构造函数来初始化一个对象。而结构是不用,可以直接用。
#5
干吗那么复杂?用Record不就可以了。
type
Ta=record
ID:string;
Name:string;
end;
也不用担心初始化之类的。
type
Ta=record
ID:string;
Name:string;
end;
也不用担心初始化之类的。
#6
多谢各位大侠!!!小弟还有一个问题:
如果循环中出错,怎样能让循环继续?我 try...except了,不行,退出了;
把循环中的代码做在单独一个 procedure 里也不行??!
for ...... do
begin
with query1 do
begin
......
try
open;
except
....
end;
end;
如果循环中出错,怎样能让循环继续?我 try...except了,不行,退出了;
把循环中的代码做在单独一个 procedure 里也不行??!
for ...... do
begin
with query1 do
begin
......
try
open;
except
....
end;
end;
#7
for ... do
begin
try
open;
except
continue; //关键
end;
end;
begin
try
open;
except
continue; //关键
end;
end;
#8
nne998(tony)老弟,问题解决了别忘了加分。(你留着也没用,还增加管理员的工作)
#1
delphi的对象模型是基于引用的,而不是基于值的,所以应该这样:
var xx:Ta;
begin
xx := Ta.Create;
...
xx.Free; //to destroy
end;
var xx:Ta;
begin
xx := Ta.Create;
...
xx.Free; //to destroy
end;
#2
也就是说,var中定义的对象,只有内建类型(如:integer、string等),是基于值的,对于程序员自定义类型,都是基于引用的(就像是一个指针)。
#3
同意楼上的高见!你应在用的时候再创建一个实例。
#4
你写的是类,类的实例要通过构造函数来初始化一个对象。而结构是不用,可以直接用。
#5
干吗那么复杂?用Record不就可以了。
type
Ta=record
ID:string;
Name:string;
end;
也不用担心初始化之类的。
type
Ta=record
ID:string;
Name:string;
end;
也不用担心初始化之类的。
#6
多谢各位大侠!!!小弟还有一个问题:
如果循环中出错,怎样能让循环继续?我 try...except了,不行,退出了;
把循环中的代码做在单独一个 procedure 里也不行??!
for ...... do
begin
with query1 do
begin
......
try
open;
except
....
end;
end;
如果循环中出错,怎样能让循环继续?我 try...except了,不行,退出了;
把循环中的代码做在单独一个 procedure 里也不行??!
for ...... do
begin
with query1 do
begin
......
try
open;
except
....
end;
end;
#7
for ... do
begin
try
open;
except
continue; //关键
end;
end;
begin
try
open;
except
continue; //关键
end;
end;
#8
nne998(tony)老弟,问题解决了别忘了加分。(你留着也没用,还增加管理员的工作)