【问题标题】:Translate UniGui Delphi code to C++Builder将 UniGui Delphi 代码翻译成 C++Builder
【发布时间】:2020-07-30 08:05:24
【问题描述】:

如何将这段代码翻译成 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' 不是具有虚函数的已定义类

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

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

【问题讨论】:

标签: c++ delphi types c++builder


【解决方案1】:

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]);

查看这些相关问题:

Should I use static_cast or reinterpret_cast when casting a void* to whatever

When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-09-05
    • 1970-01-01
    • 2016-08-04
    • 2014-01-06
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多