[英]Translate UniGui Delphi code to C++Builder
How can I translate this code into C++?如何将此代码翻译成 C++? UniGui component.
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;
I have a problem with Frm:= FrmList[i];
我对
Frm:= FrmList[i];
有疑问. . I have tried:
我努力了:
frm = UniSession->FormsList->Items[i];
E2034 Cannot convert 'void *' to 'TUniBaseForm *'
E2034 无法将 'void *' 转换为 'TUniBaseForm *'
frm = dynamic_cast<TUniBaseForm*>(UniSession->FormsList->Items[i]);
E2307 Type 'void' is not a defined class with virtual functions
E2307 类型 'void' 不是具有虚拟功能的已定义 class
frm = dynamic_cast<TUniBaseForm*>(UniSession->FormsList[i]);
E2031 Cannot cast from 'TList' to 'TUniBaseForm *'
E2031 无法从“TList”转换为“TUniBaseForm *”
Delphi allows an untyped pointer ( void*
in C++) to be assigned to another typed pointer without a cast. Delphi 允许将一个无类型指针(C++ 中的
void*
)分配给另一个没有类型转换的类型指针。 C++ does not, you need an explicit cast. C++ 没有,您需要显式转换。
You were on the right track with your 2nd attempt, but you need to use either static_cast
or reinterpret_cast
, instead of dynamic_cast
, eg:您在第二次尝试时走在了正确的轨道上,但您需要使用
static_cast
或reinterpret_cast
,而不是dynamic_cast
,例如:
TUniBaseForm *Frm = static_cast<TUniBaseForm*>(FrmList->Items[i]);
or或者
TUniBaseForm *Frm = reinterpret_cast<TUniBaseForm*>(FrmList->Items[i]);
See these related questions:请参阅以下相关问题:
Should I use static_cast or reinterpret_cast when casting a void* to whatever在将 void* 转换为任何内容时,我应该使用 static_cast 还是 reinterpret_cast
When should static_cast, dynamic_cast, const_cast and reinterpret_cast be used?什么时候应该使用 static_cast、dynamic_cast、const_cast 和 reinterpret_cast?
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.