VS2015企业中的错误C4576

HDJ*_*MAI 5 c visual-c++ visual-studio-2015

当我尝试编译文件时,我在Visual Studio 2015中出现错误C4576:transcoding.c.

这个文件的源代码在这里:transcoding.c

错误C4576:带括号的类型后跟初始化列表是非标准的显式类型转换语法

该指令的第127行出现错误:

enc_ctx->time_base = (AVRational) { 1, enc_ctx->sample_rate };
Run Code Online (Sandbox Code Playgroud)

我在我的项目https://www.ffmpeg.org/download.html中使用了ffmpeg的来源

我四处寻找解决方案,但我无法纠正错误

如果有人找到类似的东西,请提供一个想法

小智 6

删除宏定义中类型周围的括号。那应该有效。

enc_ctx->time_base = AVRational { 1, enc_ctx->sample_rate };
Run Code Online (Sandbox Code Playgroud)


AnT*_*AnT 5

尽管有其他一些答案错误地声称,VS2015编译器为C99功能提供了全面的支持,包括您试图在该有问题的代码行中使用的复合文字功能。

对于错误消息的一种可能解释是,尽管源文件被命名为.cfile,但它仍被编译为C ++文件。项目设置可能会明确请求此文件的C ++编译器。在C ++中,此代码无效。

检查您的编译设置,以查看它是否包含/TP(“编译为C ++”)开关。


Dom*_*Dom 5

老问题,但是......解决方案非常简单:

AVRational tb;
tb.num = 1;
tb.den = enc_ctx->sample_rate;

enc_ctx->time_base = tb;
Run Code Online (Sandbox Code Playgroud)

或者

enc_ctx->time_base.num = 1;
enc_ctx->time_base.den = enc_ctx->sample_rate;
Run Code Online (Sandbox Code Playgroud)