簡體   English   中英

無法訪問矢量類成員

[英]Can't access vector class members

我有這個代碼:

WItem.h

#include <vector>
#include <string>

typedef struct iteminfo {
int rowid;
   char* item;
   int type;
   int extra;
   int objectid;
} item;


class CItem {
 public:
    void push(int rowid, char* item, int type, int extra, int objectid);
    std::vector<iteminfo> data;
};

WItem.cpp

#include "witem.h"

void CItem::push(int rowid, char* item, int type, int extra, int objectid) {
   iteminfo* temp = new iteminfo;
   temp->rowid = rowid;
   temp->item = item;
   temp->type = type;
   temp->extra = extra;
   temp->objectid = objectid;

   this.data.push_back(temp);
}

我收到這些錯誤:

  • `data'不是一種類型
  • 在'。'之前請求非聚合類型的成員 代幣

我不知道出了什么問題。

  1. this.data是錯誤的,需要只是datathis->data

  2. dataiteminfo的向量, tempiteminfo *即指針。 你不需要在這里使用new ,你應該只在“堆棧”上創建項目,然后使用push_back將它的副本插入到向量中。

  3. 因為這可能根本不是C,所以不需要typedef,但更多的是使用std::string作為字符串而不是char * 保持這些指針,你將陷入很多困境。

  4. 優選地,不要將item用作類型和成員。 這是合法的,但會在代碼中混淆。

  5. 理想情況下,將data作為CItem的私有成員(順便提一下,如果您使用類名稱itemCItem只是為了在這里重現您的問題,那很好,但在實際代碼中,它們是糟糕的類名,請選擇更具描述性的內容)。

this.data應該是this->data ,因為this是C ++中的指針。

CashCow對錯誤做了很好的分析。 另外我想指出一點

  • push應該采用iteminfo類型,參數列表很亂

  • iteminfo應該有一個構造函數

    iteminfo(int rowid, char* item, int type, int extra, int objectid);

    也想到讓會員私密,以保護他們免受全球濫用

如果您的代碼示例已完成,則您認識到類CItem已過時,可能會被std::vector<iteminfo> (或typedef)替換

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM