我正在使用Visual C++ Express 2008尝试编译类似以下代码的内容:
没有问题。
{
...
AVRational test = {1, 1000};
...
}
但是,当它是以下内容时,就会有问题:
{
...
AVRational test = (AVRational){1, 1000};
...
}
出现错误:
1>..\..\..\projects\test\xyz.cpp(1139) : error C2059: syntax error : '{'
1>..\..\..\projects\test\xyz.cpp(1139) : error C2143: syntax error : missing ';' before '{'
1>..\..\..\projects\test\xyz.cpp(1139) : error C2143: syntax error : missing ';' before '}'
AVRational(ffmpeg.org库)的定义如下:
typedef struct AVRational{
int num; ///< numerator
int den; ///< denominator
} AVRational;
FFmpeg带有一些预定义值,例如
#define AV_TIME_BASE_Q (AVRational){1, AV_TIME_BASE}
以下是使用方法:
av_rescale_q(seek_target, AV_TIME_BASE_Q, pFormatCtx->streams[stream_index]->time_base);
在Visual C++ Express 2008上编译失败。
看起来相同的代码在gcc编译器上可以编译而无错误/警告。为什么我在VC++上会得到这个错误?在结构值上进行转换是C/C++标准的方式吗?有没有办法避免这个错误,同时仍然能够使用定义的AV_TIME_BASE_Q?
AVRational test = (AVRational){1, 1000};
不是有效的 C++ 代码。这是 C99 的一个特性,称为“复合字面量”,gcc 将其作为扩展支持。 - Brian Bi