typedef struct default initialization

时间:2016-03-25 20:19:59

标签: c++ struct typedef

如何对结构进行默认初始化?

我正在尝试为我的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,它已经解决了。

1 个答案:

答案 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;
};