У меня есть этот код:
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 провел хороший анализ ошибок. Кроме того, я хотел бы отметить,
толчок должен принять тип iteminfo
, список параметров грязный
iteminfo
должен иметь конструктор
iteminfo(int rowid, char* item, int type, int extra, int objectid);
также подумайте о том, чтобы сделать членов частными, чтобы защитить их от глобального злоупотребления
если ваш пример кода завершен, вы узнаете этот класс CItem
устарела и может быть заменена std::vector<iteminfo>
(или определение типа)