我有这段代码:
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);
}
我得到了这些错误:
我不知道出了什么问题。
答案 0 :(得分:5)
this.data
错误,需要data
或this->data
data
是iteminfo
的向量,temp
是iteminfo *
,即指针。你不需要在这里使用new
,你应该在堆栈上创建项目&#34;&#34;然后使用push_back
将其副本插入到矢量中。
由于这可能根本不是C,因此不需要typedef,但更多的是使用std::string
表示不是char *
的字符串。你会在这些指针中遇到很多麻烦。
最好不要将item
作为类型和成员使用。这是合法的,但会让您的代码感到困惑。
理想情况下,让data
成为CItem
的私人成员(顺便提一下,如果您使用的是类名item
和CItem
,只是为了在此处重现您的问题&# 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)替换