簡體   English   中英

錯誤:不允許使用類型的復合文字

[英]Error: A compound literal of type not allowed

我有一個結構,其中包含指向回調函數的指針,例如:

typedef void    (*LOAD_CB)(resource* r);
typedef void    (*UNLOAD_CB)(resource* r);

typedef void    (*CREATE_CB)(void* i);
typedef void    (*DESTROY_CB)(void* i);

typedef struct /*_resman_callbacks*/ //<-- causes error
{
    LOAD_CB    load;
    UNLOAD_CB   unload;
    CREATE_CB  create;
    DESTROY_CB destroy;

} resman_callbacks;

然后,我在運行時初始化這些函數,並將它們添加到包含其他回調的列表中,並調用該函數:

register_extension(".my_file_extension", &(/*error appears here*/resman_callbacks){load, unload, create, destroy});

當我的結構沒有名稱(例如_resman_callbacks)時,這不會導致錯誤,但是,在結構定義中提供名稱時,IDE會顯示錯誤“不允許使用類型為“ resman_callbacks”的復合文字”。 這不會引起任何運行時問題,也不會導致代碼編譯失敗。 這給我兩個問題

A)考慮到我的代碼仍然起作用,這是否值得關注?

B)為什么具有名稱的結構會導致錯誤出現?

我的IDE是Visual Studio Express 2013。

編輯:添加了register_extension的聲明和實現,以及其他相關數據。

//resman.h
void    register_extension(char* file_ext, resman_callbacks* cb);

//resmain.c
typedef struct
{
    char*                 ext; //extension associated with this resource
    resman_callbacks*     cb;  //structure containing callback functions

} registered_extension;

typedef struct
{
    registered_extension* reg_ext;  //list of registered extensions
    unsigned short        ext_ct;   //current number of registered extensions
    unsigned short        size;     //maximum number of registered extensions
} ext_manager;

static ext_manager extman;

void register_extension(char* ext, resman_callbacks* callbacks)
{
    if (extman.ext_ct == extman.size)
    {
        extman.size = extman.size * 2;
        extman.reg_ext = realloc(extman.reg_ext, extman.size);
    }

    *(extman.reg_ext + extman.ext_ct) = (registered_extension) { ext, callbacks };
    extman.ext_ct = extman.ext_ct + 1;
}

假設在代碼中實際使用以下函數之前 ,已聲明以下函數:

void load(resource* r);
void unload(resource* r);
void create(void* i);
void destroy(void* i);

嘗試這個:

resman_callbacks cb = {load, unload, create, destroy};
register_extension(".my_file_extension", &cb);

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM