如何对结构进行默认初始化?
我正在尝试为我的struct进行默认初始化,但是我收到了这个错误:
error: request for member 'type' in '((CCatManager::cat_shop_item*)this)->CCatManager::cat_shop_item::catAttr', which is of non-class type 'TCategoryAttribute [0]'
..........................
这是我的代码:
enum EMisc
{
CAT_MAX_NUM = 8,
};
typedef struct TCategoryAttribute
{
BYTE type;
short value;
} TCategoryAttribute;
typedef struct category_items
{
long price;
DWORD order;
TCategoryAttribute catAttr[CAT_MAX_NUM];
category_items()
{
price = 0;
order = 0;
catAttr.type[0] = 0;
.....
catAttr.type[7] = 0;
catAttr.value[0] = 0;
.....
catAttr.value[7] = 0;
}
} CATEGORY_ITEMS;
“价格”和“订单”没关系,但它们有效,但TCategoryAttribute不起作用......
我真的很困惑......提前感谢,我希望问题是对的。
感谢@Michael,它已经解决了。
答案 0 :(得分:1)
这是因为type
不是数组,而是catAttr
。其次,你声明了其中3个,因此你的第三项是索引2.记住,你从0开始计算。所以将你的代码部分改为:
category_items()
{
price = 0;
order = 0;
catAttr[0].type = 0;
catAttr[1].type = 0;
catAttr[2].type = 0;
//catAttr[3].type = 0; //you can't hit [3]
catAttr[0].value = 0;
catAttr[1].value = 0;
catAttr[2].value = 0;
//catAttr.value[3] = 0;
}
请参阅此处编译(和工作)的完整代码:http://coliru.stacked-crooked.com/a/abda47415ebb9938
BTW,typedef
是多余的。只需这样做......
struct TCategoryAttribute
{
BYTE type;
short value;
};