我使用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?
嘗試圍繞你的{}與()...我已經看到在其他情況下的工作。 – HypnoToad
你的意思是做這樣的事情「av_rescale_q(seek_target,(AV_TIME_BASE_Q),pFormatCtx-> streams [stream_index] - > time_base);」?不工作。出現類似的錯誤。 –
'AVRational test =(AVRational){1,1000};'是無效的C++。這是一個名爲「複合文字」的C99特性,gcc支持它作爲擴展。 – Brian