Не могу получить доступ к членам векторного класса

У меня есть этот код:

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);
}

И я получаю эти ошибки:

  • «данные» не тип
  • запрос на член неагрегированного типа перед ‘.’ знак

И я понятия не имею, что не так.

2

Решение

  1. this.data неправильно, должно быть либо просто data или же this->data

  2. data это вектор iteminfo а также temp является iteminfo * то есть указатель. Вам не нужно использовать new здесь вы должны просто создать элемент «в стеке», а затем использовать push_back вставить копию этого в ваш вектор.

  3. Поскольку это, скорее всего, вовсе не C, нет необходимости в typedef, но тем более используйте std::string для строк нет char *, Вы будете в большом беспорядке, поддерживая эти указатели.

  4. Желательно не использовать item как тип, так и член. Это законно, но запутается в вашем коде.

  5. Идеально сделать data частный член CItem (Кстати, если вы используете имена классов item а также CItem просто чтобы воспроизвести вашу проблему здесь, это нормально, но в реальном коде это плохие имена классов, выберите что-то более наглядное).

5

Другие решения

this.data должно быть this->data, так как this это указатель в C ++.

4

CashCow провел хороший анализ ошибок. Кроме того, я хотел бы отметить,

  • толчок должен принять тип iteminfo, список параметров грязный

  • iteminfo должен иметь конструктор

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

    также подумайте о том, чтобы сделать членов частными, чтобы защитить их от глобального злоупотребления

если ваш пример кода завершен, вы узнаете этот класс CItem устарела и может быть заменена std::vector<iteminfo> (или определение типа)

0
По вопросам рекламы [email protected]