1

我试图在 c 中初始化一个新的结构。

我的语法有什么问题?

    AddressItem_Callback_ContextType *context;

   //check if icons need to be downloaded
   if (pEntity->cBigIcon[0] != 0){
      if (res_get(RES_BITMAP,RES_SKIN, pEntity->cBigIcon) == NULL){

          context = {pEntity->iID, pEntity->cBigIcon};
          //context->Icon = pEntity->cBigIcon;
          //context->iID = pEntity->iID;

         res_download(RES_DOWNLOAD_IMAGE, pEntity->cBigIcon, NULL, "",TRUE, 1, addressItem_icon_download_callback, context );
      }
   }

我也收到语法错误:

    AddressItem_Callback_ContextType *context = {0,NULL};

   //check if icons need to be downloaded
   if (pEntity->cBigIcon[0] != 0){
      if (res_get(RES_BITMAP,RES_SKIN, pEntity->cBigIcon) == NULL){

          //context = {pEntity->iID, pEntity->cBigIcon};
          context->Icon = pEntity->cBigIcon;
          context->iID = pEntity->iID;

         res_download(RES_DOWNLOAD_IMAGE, pEntity->cBigIcon, NULL, "",TRUE, 1, addressItem_icon_download_callback, context );
      }
   }

   if (pEntity->cSmallIcon[0] != 0){
      if (res_get(RES_BITMAP,RES_SKIN, pEntity->cSmallIcon) == NULL){

          //context = {pEntity->iID, pEntity->cSmallIcon};
          context->Icon = pEntity->cSmallIcon;
          context->iID = pEntity->iID;

         res_download(RES_DOWNLOAD_IMAGE, pEntity->cSmallIcon, NULL, "",TRUE, 1, addressItem_icon_download_callback, context );
      }
   }

那么这个(3)应该工作吗?

 AddressItem_Callback_ContextType context = {0,NULL};

   //check if icons need to be downloaded
   if (pEntity->cBigIcon[0] != 0){
      if (res_get(RES_BITMAP,RES_SKIN, pEntity->cBigIcon) == NULL){

          //context = {pEntity->iID, pEntity->cBigIcon};
          context.Icon = pEntity->cBigIcon;
          context.iID = pEntity->iID;

         res_download(RES_DOWNLOAD_IMAGE, pEntity->cBigIcon, NULL, "",TRUE, 1, addressItem_icon_download_callback, context );
      }
   }

   if (pEntity->cSmallIcon[0] != 0){
      if (res_get(RES_BITMAP,RES_SKIN, pEntity->cSmallIcon) == NULL){

          //context = {pEntity->iID, pEntity->cSmallIcon};
          context.Icon = pEntity->cSmallIcon;
          context.iID = pEntity->iID;

         res_download(RES_DOWNLOAD_IMAGE, pEntity->cSmallIcon, NULL, "",TRUE, 1, addressItem_icon_download_callback, context );
      }
   }
4

2 回答 2

5
context = {pEntity->iID, pEntity->cBigIcon};

{}初始化列表只能在声明时使用,不能在赋值表达式中使用。

您必须将其分解为两个赋值语句(为此,您还必须初始化未初始化的context指针)。

于 2013-07-03T14:49:26.177 回答
2

正如 ouah 所说,初始化程序必须在声明时使用,但在 C99 中,您可以使用复合文字:

#include <stdio.h>

struct st {
    int a, b;
};

int main(void)
{
    struct st *t;

    t = &(struct st){1, 2};
    printf("%d %d\n", t->a, t->b);
    return 0;
}

在你的情况下

context = &(struct AddressItem_Callback_ContextType){pEntity->iID, pEntity->cBigIcon};
于 2013-07-03T15:05:31.910 回答