2016-06-13 4 views
-1

私はエラーを取得しておいてください。ボーランドC++のListViewエラー

[BCC32 Error] DogReport.cpp(29): E2288 Pointer to structure required on left side of -> or ->*

コンパイルしようとしたとき。

構造体で構成されたTListの要素でTListViewを挿入しようとしています。

void __fastcall TDogReportForm::FormCreate(TObject *Sender) 
{ 
    DogListView->Items->Clear(); 
    for (int i = 0; i < DogList->Count; i++) { 
     TListItem * Item; 

     Item = DogListView->Items->Add(); 
     Item->Caption = DogList->Items[i]->firstName; 
     Item->SubItems->Add(DogList->Items[i]->lastName); 
     Item->SubItems->Add(DogList->Items[i]->ownerName); 
     Item->SubItems->Add(DogList->Items[i]->hours); 
     Item->SubItems->Add(DogList->Items[i]->dogNum); 
    } 
} 

DogList->

+0

よく「項目」はポインタの配列ですか?そうでなければあなたの問題です。 –

+0

'DogList'はあなたのコードブロックで宣言されていません。宣言された場所はどこですか? – nephtes

答えて

1

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にOwnerDataOnDataイベントハンドラを割り当てる)ので、必要なときには、オンデマンド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);