2013-10-25 43 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