2013-10-25 204 views
0

我有一個結構AVFilter,如何訪問嵌套結構變量

typedef struct AVFilter 
{ 

const char *name; 
const char *description; 
const AVClass *priv_class; 
int priv_size; 
int (*init)(AVFilterContext *ctx); 
void (*uninit)(AVFilterContext *ctx); 
int (*query_formats)(AVFilterContext *); 
const AVFilterPad *inputs; 
const AVFilterPad *outputs; 
int (*process_command)(AVFilterContext *, const char *cmd, const char *arg, char *res, int res_len, int flags); 
} AVFilter; 

我訪問像sturctur變量,

AVFilter avfilter_vsrc_color = { 
    avfilter_vsrc_color.name   = "color", 
    avfilter_vsrc_color.description  = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."), 
    avfilter_vsrc_color.priv_class  = &color_class,  // error here 
    avfilter_vsrc_color.priv_size  = sizeof(TestSourceContext),// error here 
    avfilter_vsrc_color.init   = color_init,// error here 
    avfilter_vsrc_color.uninit   = uninit,// error here 
    avfilter_vsrc_color.query_formats = color_query_formats,// error here 
    avfilter_vsrc_color.inputs   = NULL,// error here 
    avfilter_vsrc_color.outputs   = color_outputs,// error here 
    avfilter_vsrc_color.process_command = color_process_command // error here 
}; 

我不知道如何訪問priv_class.Please幫我解決這個問題

如果我不喜歡這樣,

AVFilter avfilter_vsrc_color= 
{ 
    .name   = "color", //error 
    .description  = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."), 
    .priv_class  = &color_class, 
    .priv_size  = sizeof(TestSourceContext), 
    .init   = color_init, 
    .uninit   = uninit, 
    .query_formats = color_query_formats, 
    .inputs   = NULL, 
    .outputs   = color_outputs, 
    .process_command = color_process_command 
}; 

我米得到錯誤一樣,

2>c:\users\awki6\desktop\ffmpeg\libavfilter\vsrc_testsrc.cpp(271): error C2143: syntax error : missing '}' before '.' 
2>c:\users\awki6\desktop\ffmpeg\libavfilter\vsrc_testsrc.cpp(271): error C2143: syntax error : missing ';' before '.' 
+0

什麼問題?你想對'priv_class'做什麼?什麼是「AVClass」? – Beta

+0

AVClass是另一種結構,priv_class是指向AVCLass的指針。 – JAYANTHI

+0

我知道。我在其他問題中找到了'AVClass'的定義。你還沒有回答我的其他問題。你似乎在使用逗號,你應該使用分號。您仍然在發佈錯誤消息而不告訴我們哪些行對應於行號。你已經編輯了這個問題來引用'color_class'而不解釋它是什麼。在你走路之前,你似乎試圖跑步。投票結束。 – Beta

回答

2

兩種方式:

AVFilter avfilter_vsrc_color= 
{ 
    "color", 
    NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."), 
    &color_class, 
    ... 
}; 

或更詳細的,但也許也更易讀(因爲你有很多領域):

AVFilter avfilter_vsrc_color; 
avfilter_vsrc_color.name = color; 
avfilter_vsrc_color.description = NULL_IF_CONFIG_SMALL("Provide an uniformly colored input."); 
avfilter_vsrc_color.priv_class = &color_class; 
... 
+0

這不是OP的問題,他正在初始化的方式是完全合法的。 – texasbruce

+0

它是否被接受取決於編譯器。 g ++ 4.2.1「錯誤:在'。'之前預期的primary-expression'。鐺3.2:編譯 –

+0

剛剛意識到它是在C標準但不是C++。 g ++通過使用gnu擴展標誌btw來支持它。 – texasbruce