繁体   English   中英

将 UniGui Delphi 代码翻译成 C++Builder

[英]Translate UniGui Delphi code to C++Builder

如何将此代码翻译成 C++? UniGui 组件。

var
  FrmList : TList;
  I : Integer;
  Frm : TUniBaseForm;
begin
  FrmList := UniSession.FormsList;

  UniListBox1.Clear;
  for I := 0 to FrmList.Count - 1 do
  begin
    Frm := FrmList[I];
    UniListBox1.Items.Add(Frm.Name + ' ' + Frm.ClassName  );
  end;

我对Frm:= FrmList[i];有疑问 . 我努力了:

frm = UniSession->FormsList->Items[i];

E2034 无法将 'void *' 转换为 'TUniBaseForm *'

frm = dynamic_cast<TUniBaseForm*>(UniSession->FormsList->Items[i]);

E2307 类型 'void' 不是具有虚拟功能的已定义 class

frm = dynamic_cast<TUniBaseForm*>(UniSession->FormsList[i]);

E2031 无法从“TList”转换为“TUniBaseForm *”

Delphi 允许将一个无类型指针(C++ 中的void* )分配给另一个没有类型转换的类型指针。 C++ 没有,您需要显式转换。

您在第二次尝试时走在了正确的轨道上,但您需要使用static_castreinterpret_cast ,而不是dynamic_cast ,例如:

TUniBaseForm *Frm = static_cast<TUniBaseForm*>(FrmList->Items[i]);

或者

TUniBaseForm *Frm = reinterpret_cast<TUniBaseForm*>(FrmList->Items[i]);

请参阅以下相关问题:

在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast

什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM