我是新来的,这是我的第一个问题.. (我在查看这个网站的时候找到了一些问题的答案,但是我不明白他们的意思,因为我的意思有点不同。) 我先向您展示一些代码: 所以这是我的班级:
class citems{
public:
char* name;
int colorR;
int colorG;
int colorB;
int type;
citems(char* name, int colorR, int colorG, int colorB, int type)
{
this->name = name;
this->colorR = colorR;
this->colorG = colorG;
this->colorB = colorB;
this->type = type;
}
};
然后我会做一个像这样做的功能,但有一个很长的列表:
citems getObjectFromId(int ID)
{
static unordered_map <int, citems> item;
static bool init = false;
if (!init)
{
item[123546]= citems("Name", 181,179, 0, 9);
init = true;
}
return item[ID];
}
所以我可以调用项目ID,然后随时获取单独的颜色,类型和名称。 到目前为止一切都还可以,但是当我编译时我得到了这个错误:
c:\ program files(x86)\ microsoft visual studio 11.0 \ vc \ include \ unordered_map(239):错误C2228:左边的&#39; .first&#39;必须有class / struct / union
所以我读到我必须制作自己的EqualOperator或类似的东西,但我似乎无法从中获得逻辑。 提前谢谢。
答案 0 :(得分:0)
对于T& operator[]( const Key& key )
,映射类型必须满足DefaultConstructible要求。这意味着您的类citems需要一个默认构造函数:
class citems{
public:
//...
/* possible form 1 */
citems() {
}
/* possible form 2 ( default parameter values)*/
citems( char* name = 0, int colorR = -1, int colorG = -1,
int colorB = -1, int type = -1) {
}
};
另请注意,T& operator[]( const Key& key )
返回对映射到等效于key的键的值的引用,如果此类键尚不存在则执行插入。如果您不希望在地图中没有给定键但是要更改现有键时插入新元素 - 您首先要使用find()
或插入来检查地图上是否存在此元素与insert()
。