[英]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);
}
我收到這些錯誤:
我不知道出了什么問題。
this.data
是錯誤的,需要只是data
或this->data
data
是iteminfo
的向量, temp
是iteminfo *
即指針。 你不需要在這里使用new
,你應該只在“堆棧”上創建項目,然后使用push_back
將它的副本插入到向量中。
因為這可能根本不是C,所以不需要typedef,但更多的是使用std::string
作為字符串而不是char *
。 保持這些指針,你將陷入很多困境。
優選地,不要將item
用作類型和成員。 這是合法的,但會在代碼中混淆。
理想情況下,將data
作為CItem
的私有成員(順便提一下,如果您使用類名稱item
和CItem
只是為了在這里重現您的問題,那很好,但在實際代碼中,它們是糟糕的類名,請選擇更具描述性的內容)。
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.