2

我有这个代码:

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

而且我不知道出了什么问题。

4

3 回答 3

5
  1. this.data是错误的,必须是公正的datathis->data

  2. data是一个向量iteminfo并且tempiteminfo *一个指针。您不需要在new这里使用,您应该只在“堆栈上”创建项目,然后使用push_back将它的副本插入到您的向量中。

  3. std::string由于这很可能根本不是 C,因此不需要 typedef,但对于字符串 not更是如此char *。维护这些指针你会陷入很多混乱。

  4. 最好不要item同时用作类型和成员。这是合法的,但会在您的代码中混淆。

  5. 理想情况下,创建data一个私有成员CItem(顺便说一下,如果您使用类名item并且CItem只是在这里重现您的问题,那很好,但在实际代码中它们是糟糕的类名,请选择更具描述性的名称)。

于 2013-01-07T13:28:15.650 回答
4

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

于 2013-01-07T13:19:04.030 回答
0

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

  • push 应该带一个类型iteminfo,参数列表比较乱

  • iteminfo应该有一个构造函数

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

    还可以考虑将成员设为私有以保护他们免受全球滥用

如果您的代码示例是完整的,您会发现该类CItem已过时并且可能被std::vector<iteminfo>(或 typedef)替换

于 2013-01-07T14:54:03.723 回答