HDJEMAI
HDJEMAI

Reputation: 9800

Error C4576 in VS2015 enterprise

I have the error C4576 in Visual studio 2015 when I tried to compile the file: transcoding.c.

The source code of this file is here: transcoding.c

error C4576: a parenthesized type followed by an initializer list is a non-standard explicit type conversion syntax

The error arise at line 127 in this instruction:

enc_ctx->time_base = (AVRational) { 1, enc_ctx->sample_rate };

I used the source of ffmpeg in my project https://www.ffmpeg.org/download.html

I searched around for a solution but I'm not able to correct the error

If someone have found something similar, please provide an idea

Upvotes: 7

Views: 13106

Answers (4)

GANESH B K
GANESH B K

Reputation: 431

Remove the parenthesis around the type in the macro definition. That should work.

enc_ctx->time_base = AVRational { 1, enc_ctx->sample_rate };

Upvotes: 7

Dom
Dom

Reputation: 583

Old question, but... The solution is pretty simple:

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

enc_ctx->time_base = tb;

or

enc_ctx->time_base.num = 1;
enc_ctx->time_base.den = enc_ctx->sample_rate;

Upvotes: 5

AnT stands with Russia
AnT stands with Russia

Reputation: 320421

Despite what some other answers incorrectly claim, VS2015 compiler provides comprehensive support for C99 features, including the compound literal feature you are trying to use in that problematic line.

One possible explanation for the error message is that it the source file, despite being named as .c file, is being compiled as C++ file. The project settings might explicitly request C++ compiler for this file. In C++ this code is invalid.

Check your compilation settings to see if it by any chance includes a /TP ("compile as C++") switch.

Upvotes: 10

MSalters
MSalters

Reputation: 179789

Looks like a question where the C and C++ tags make sense. You're trying to compile C99 code with a C++ compiler. That doesn't work.

Upvotes: 2

Related Questions