关于delphi类的问题啊!!大神们!!!!
unitunit1;//窗体主单元varForm1:TForm1;implementationusesGenericSpace;//申明单元2GenericSpacety...
unit unit1; //窗体主单元
var
Form1: TForm1;
implementation
uses GenericSpace; //申明单元2 GenericSpace
type
arrayF2 = array of array of double;
arrayF1 = array of double;
xdata,ydata:arrayF1;
........
ULR1.ULR(xdata,ydata,N); //出错!!!!!!!!!!!!!!!!
........
unit GenericSpace; //用于放类的单元
interface
type
arrayF1 = array of double;
type
UnaryLinearRegression=class
private
xx:double;
public
procedure ULR(xdata,ydata:arrayF1; N:integer);
end;
implementation
........
、、、、、他说ULR1.ULR(xdata,ydata,N);出错,说的是主单元的arrayF1与放类的单元里的arrayF1不相符,这是怎么回事啊!!!!!!!!!!!
这个是变量的作用域的问题吗,感觉很奇怪,这怎么出错了!! 展开
var
Form1: TForm1;
implementation
uses GenericSpace; //申明单元2 GenericSpace
type
arrayF2 = array of array of double;
arrayF1 = array of double;
xdata,ydata:arrayF1;
........
ULR1.ULR(xdata,ydata,N); //出错!!!!!!!!!!!!!!!!
........
unit GenericSpace; //用于放类的单元
interface
type
arrayF1 = array of double;
type
UnaryLinearRegression=class
private
xx:double;
public
procedure ULR(xdata,ydata:arrayF1; N:integer);
end;
implementation
........
、、、、、他说ULR1.ULR(xdata,ydata,N);出错,说的是主单元的arrayF1与放类的单元里的arrayF1不相符,这是怎么回事啊!!!!!!!!!!!
这个是变量的作用域的问题吗,感觉很奇怪,这怎么出错了!! 展开
3个回答
展开全部
你对DELPHI的类型机制有点不理解,我来给你答疑
你两个单元都是声明arrayF1 = array of Double,看起来类型一样、内容一样,实际是两个不同的类型,因为它们在编译时,类型的地址是不一样的!编译后程序并不会认"arrayF1"这个名字,只会认地址,所以编译器就会报你类型不匹配!
因此,你在unit1重新声明一次arrayF1完全就是画蛇添足!你引用了GenericSpace,直接就能用里面的arrayF1类型了。实在有特殊需要,就这样声明
type
arrayF1 = GenericSpace.arrayF1;
你两个单元都是声明arrayF1 = array of Double,看起来类型一样、内容一样,实际是两个不同的类型,因为它们在编译时,类型的地址是不一样的!编译后程序并不会认"arrayF1"这个名字,只会认地址,所以编译器就会报你类型不匹配!
因此,你在unit1重新声明一次arrayF1完全就是画蛇添足!你引用了GenericSpace,直接就能用里面的arrayF1类型了。实在有特殊需要,就这样声明
type
arrayF1 = GenericSpace.arrayF1;
展开全部
procedure ULR(xdata,ydata:arrayF1; N:integer); 这一句放外面去试试。
追问
恩 我看来没说清楚!!
追答
你这样在ULR1中是不能调用unit1中的arrayF1的,要在ULR1中的implementation下面再申明一下:uses unit1;
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
展开全部
奇葩问题啊!
追问
其实,我已经调试完成了,,只是不明白为什么不能再这样ULR(xdata,ydata:arrayF1; N:integer);
而非要这样ULR(xdata,ydata:array of double; N:integer);才可以!!!!
已赞过
已踩过<
评论
收起
你对这个回答的评价是?
推荐律师服务:
若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询