无法访问矢量类成员

时间:2013-01-07 13:18:10

标签: c++ vector std dev-c++

我有这段代码:

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'不是类型
  • 在'。'之前请求非聚合类型的成员令牌

我不知道出了什么问题。

3 个答案:

答案 0 :(得分:5)

  1. this.data错误,需要datathis->data

  2. dataiteminfo的向量,tempiteminfo *,即指针。你不需要在这里使用new,你应该在堆栈上创建项目&#34;&#34;然后使用push_back将其副本插入到矢量中。

  3. 由于这可能根本不是C,因此不需要typedef,但更多的是使用std::string表示不是char *的字符串。你会在这些指针中遇到很多麻烦。

  4. 最好不要将item作为类型和成员使用。这是合法的,但会让您的代码感到困惑。

  5. 理想情况下,让data成为CItem的私人成员(顺便提一下,如果您使用的是类名itemCItem,只是为了在此处重现您的问题&# 39;很好,但在实际代码中,他们是糟糕的类名,选择更具描述性的东西。

答案 1 :(得分:4)

this.data应为this->data,因为this是C ++中的指针。

答案 2 :(得分:0)

CashCow对错误做了很好的分析。另外我想指出

  • push应该采用类型iteminfo,参数列表是凌乱的

  • iteminfo应该有一个构造函数

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

    还考虑让成员保密以保护他们免受全球滥用

如果您的代码示例已完成,则表示您认为类CItem已过时,可能会被std::vector<iteminfo>(或typedef)替换