无法访问向量类成员

Can't access vector class members

本文关键字:成员 向量 访问      更新时间:2023-10-16

我有这样的代码:

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语言,所以不需要类型定义,但更重要的是,对于字符串使用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)所取代