TList
が型なしvoid*
ポインタを保持しているが含まれている各ライン上のエラーがあります。そのItems[]
プロパティゲッターはvoid*
ポインタを返します。あなたは型キャストし、それを自分のデータ・フィールドにアクセスするために必要があります。
// DO NOT use the OnCreate event in C++! Use the actual constructor instead...
__fastcall TDogReportForm::TDogReportForm(TComponent *Owner)
: TForm(Owner)
{
DogListView->Items->Clear();
for (int i = 0; i < DogList->Count; i++)
{
// use whatever your real type name is...
MyDogInfo *Dog = static_cast<MyDogInfo*>(DogList->Items[i]); // <-- type-cast needed!
TListItem *Item = DogListView->Items->Add();
Item->Caption = Dog->firstName;
Item->SubItems->Add(Dog->lastName);
Item->SubItems->Add(Dog->ownerName);
Item->SubItems->Add(Dog->hours);
Item->SubItems->Add(Dog->dogNum);
}
}
サイドノートでは、代わりにTListView
に犬の情報のすべてをコピーするのでは、仮想モードでTListView
を使用して検討するかもしれない(セットtrueにOwnerData
とOnData
イベントハンドラを割り当てる)ので、必要なときには、オンデマンドDogList
から直接情報を表示することができます。
__fastcall TDogReportForm::TDogReportForm(TComponent *Owner)
: TForm(Owner)
{
DogListView->Items->Count = DogList->Count;
}
void __fastcall TDogReportForm::DogListViewData(TObject *Sender, TListItem *Item)
{
// use whatever your real type name is...
MyDogInfo *Dog = static_cast<MyDogInfo*>(DogList->Items[Item->Index]);
Item->Caption = Dog->firstName;
Item->SubItems->Add(Dog->lastName);
Item->SubItems->Add(Dog->ownerName);
Item->SubItems->Add(Dog->hours);
Item->SubItems->Add(Dog->dogNum);
}
ということで、あなたはより多くのタイプ - である別のコンテナを使用するようにDogList
を変更する必要があります安全なときTList
など、std::vector
:
std::vector<MyDogInfo> DogList;
...
MyDogInfo &Dog = DogList[index]; // <-- no type-cast needed
Item->Caption = Dog.firstName;
Item->SubItems->Add(Dog.lastName);
Item->SubItems->Add(Dog.ownerName);
Item->SubItems->Add(Dog.hours);
Item->SubItems->Add(Dog.dogNum);
よく「項目」はポインタの配列ですか?そうでなければあなたの問題です。 –
'DogList'はあなたのコードブロックで宣言されていません。宣言された場所はどこですか? – nephtes