delphi - 从指针问题中访问值

标签 delphi pointers

我有一个 TObject 类型的类,称为 CModelItem

我想拥有这些对象的列表并能够修改每个对象的值

所以,我创建了一个类

CQueueList = class(TList)

private

public

end;

我做
QueueList : CQueueList;

在变量中

现在,我可以将 CModelItem 添加到此列表中,如下所示:
QueueList := CQueueList.Create;
for idx := 0 to ndx - 1 do
  begin
    MyItem := CModelItem.Create;
    MyItem.CopyHead(CModelItem(RunList.Objects[idx]));
    MyItem.ReadData;
    MyItem.NumOfIterations := NumRepEdit.Value;
    MyItem.IsInQueue := True;
    MyItem.LogEvents := EventsCheckBox.Checked;
    MyItem.LogMatch := MatchCheckBox.Checked;
    MyItem.LogUpdates := UpdatesCheckBox.Checked; 

    QueueList.Add(MyItem);
  end;

我也可以使用它,所以我可以这样做:
DefForm := TRunDefForm.Create(Self, QueueList.Items[idx]);

DefForm 接收一个组件和一个 CModelItem

但是我在尝试修改 QueueL 中对象的值时遇到了问题

首先,我无法访问 MyItem.IsInQueue 之类的东西
QueueList.Items[idx].IsInQueue := blah;

因为它告诉我 IsInQueue 是“未声明的标识符”

我也尝试过制作一个新的 CModelItem 并将信息复制过来,如下所示:
idx := QueueListBox.ItemIndex;
MyItem := QueueList.Items[idx];

这编译得很好,但是当它进入那个函数时会抛出一个“访问冲突错误”

我注意到 QueueList.Items[idx] 是一个指针,但我真的不确定我应该如何访问它

最佳答案

编译器提示是因为 TList.Items返回一个无类型的指针。

您可以使用类型转换:

  CModelItem(QueueL.Items[idx]).IsInQueue := blah;

您还可以重新实现 Items您的 CQueueList 中的属性(property)类(class):
private
  function GetItems(Index: Integer): CModelItem;
public
  property Items[Index: Integer]: CModelItem read GetItems; default;
end;

function CQueueList.GetItems(Index: Integer): CModelItem;
begin
  Result := inherited Items[Index];
end;

如您所见,使用局部变量是可行的;尽管访问冲突可能是您代码中其他地方的错误。

关于delphi - 从指针问题中访问值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6047189/

相关文章:

delphi - 如何在Delphi中使用BDE的TSession类?

excel - Delphi Ole - 突然错误 - 接口(interface)不支持

c++ - 编译器如何知道指针的类型

c++ - 指向类成员函数的指针

delphi - 如何获取泛型类方法的方法地址?

delphi - 如何最好地将加载/保存文件添加到版本控制系统/从版本控制系统添加到我的 Delphi 应用程序

C99:使用不同数量的参数转换回调

c - fwrite 并打印到一个输出文件程序

c - 两个指针的段错误

python - 如何在Python下为Delphi创建线程