San*_*iew 3 c c++ ffmpeg visual-c++
我正在使用 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 的同时避免这个错误?