Delphi 不兼容类型:';tValidPos';和';TPO&x27;
在以下代码中,我得到了注释中的错误:Delphi 不兼容类型:';tValidPos';和';TPO&x27;,delphi,casting,delphi-2010,Delphi,Casting,Delphi 2010,在以下代码中,我得到了注释中的错误: function ToPos : tValidPos; type tPos = (poAboveCenter , poAboveLeft , poAboveRight); tValidPos = array [Low (tPos)..High (tPos)] of tPos; const validPos : tValidPos = (poAboveRight, poAboveLeft, poAboveCenter); var
function ToPos : tValidPos;
type
tPos = (poAboveCenter , poAboveLeft , poAboveRight);
tValidPos = array [Low (tPos)..High (tPos)] of tPos;
const
validPos : tValidPos = (poAboveRight, poAboveLeft, poAboveCenter);
var
i, pos : tValidPos;
begin
i := Low (validPos); // Incompatible types: 'tValidPos' and 'tPos'
pos := validPos [i]; // Incompatible types: 'Enumeration' and 'tValidPos'
Result := i;
for i := Low (validPos) to High (validPos) do
if validPos [i] = pos then begin
Result := validPos [i];
Break;
end;
end;
我不知道怎么了,因为
i
和validPos
都属于tValidPos
pos
和validPos
pos[0]:=validPos[I]
这样的括号,我仍然会得到“不兼容的类型:'Enumeration'和'tValidPos'”
请帮我解决这个问题
i:=低(有效期);//不兼容的类型:“tValidPos”和“TPO”
i
是一个数组,但Low(validPos)
返回单个序数值,而不是数组。母鸡是不相容的类型
pos:=validPos[i];//不兼容的类型:“枚举”和“tValidPos”
pos
也是一个数组,但validPos[i]
是一个单序数值,而不是数组。母鸡是不相容的类型
对于您尝试执行的操作,
i
、pos
和Result
都需要声明为tPos
,而不是tValidPos
最终找到了解决方案。这确实很简单
由于无法使用序数值为枚举数数组编制索引,因此实现此目的的方法是基于tComboBox.ItemIndex
进行迭代,同时使用succi
函数获取下一个validPos
type tPos = (po1, po2, po3, po4, po5, poNil);
tValidPos = array [Low (tPos)..High (tPos)] of tPos;
const validPos : tValidPos = (po1, po4, poNil, poNil, poNil, poNil);
.........
function ToPos (const aComboBox: tComboBox; validPos: tValidPos) : tPos;
var p, pos : tPos ;
i : Byte;
begin
p := Low (ValidPos); // initialize with first validPos
for i := 0 to aComboBox.ItemIndex do begin
pos := validPos [p]; // current validPos
if pos = poNil then begin // not validPos?
pos := Low (ValidPos); // first validPos
Break;
end;
if Succ (p) <= High (validPos) then // next p is in range?
p := Succ (p) // next validPos
else
begin
pos := Low (ValidPos); // first validPos
Break;
end;
end;
Result := pos; // return corresponding validPos
end;
类型tPos=(po1、po2、po3、po4、po5、poNil);
tValidPos=TPO的阵列[低(tPos)…高(tPos)];
const validPos:tValidPos=(po1,po4,poNil,poNil,poNil,poNil);
.........
功能拓扑(const acombox:tcombox;validPos:tValidPos):tPos;
var p,位置:TPO;
i:字节;
开始
p:=低(有效期);//使用第一个validPos初始化
对于i:=0到aComboBox.ItemIndex是否开始
pos:=validPos[p];//当前有效期
如果pos=poNil,则开始//无效?
pos:=低(有效期);//第一个validPos
打破
结束;
如果Succ(p)查看您的代码,很难想象您正在尝试做什么?你能解释一下你想用这些代码做什么吗?另外,函数结果“tValidPos”在哪里声明?在上一个问题(您删除的问题)中,我解释说您发布的代码毫无意义,并询问您何时重新发布,请在您的问题文本中解释您真正尝试实现的目标。您发布的代码中有几个问题,但是如果我们不知道您首先要做什么,就很难告诉您如何解决这些问题。再一次,请回答您的问题,并解释您的代码应该做什么,这样我们就知道如何帮助您找到答案。我将尝试解释:原始函数接收一个tComboBox和一个有效位置列表。该列表是TvalidPO的列表,而TvalidPO又是TPO的数组。tPos是列出所有可能位置的枚举器。有效位置的列表是可变的。要定位的每个元素都有其有效的位置。函数返回每个tComboBox.ItemIndex对应的TPO。我发布代码是为了简化,但最终,我认为我没有成功。我有一个该函数的工作版本,但我必须使用tPos进行赋值。有趣的是,虽然“I”和“validPos”都是“tValidPos”类型,但编译器不接受赋值。你能解释一下吗?除此之外,我不能做像'I':=validPos[0]'这样的赋值。编译器声明我必须使用enumertaor而不是序数值,这意味着我不能将tComboBox.ItemIndex值用于赋值。你知道我怎样才能做到吗?I[0]:=validPos[0];//不兼容的类型:“Enumeration”和“tValidPos”
@user2383818:如果您像我建议的那样将i
更改为TPO
,则i[0]
不是有效的语句,因为i
不再是数组,因此无法索引到其中。如果你不理解序数值和数组之间的区别,你需要停止你正在做的事情,去读一本好的编程基础教程。1-不,在上面的陈述中,“i”仍然是“tValidPos”。这就是为什么我不明白为什么我不能将数组“validPos”的元素[0]分配给数组“I”的元素[0]。2-您因按错键而被忽略。即使你的压力是正确的,那也不意味着你有权被打搅。