0

次のように関数を呼び出す際の問題:

関数呼び出し:

Sbac_DecodeBin(pstSlice->pstBAC,&(UINT8)ui32Abs_Mvd_G_0[0],
pstSlice->pstCtxModel->aucABS_MVD_GREATER_0_1_FLAG,0,
pstSlice->pstValMps->aucABS_MVD_GREATER_0_1_FLAG,BSHandle);

関数宣言:

VOID Sbac_DecodeBin(Init_BAC *pstBAC,UINT8* piBinValue,UINT8* pucSateIdx,
UINT8 CtxInc,UINT8* pucValMPS,HEVCD_BS_HANDLE BSHandle)

上記のコードは、Visual c ++ 2008ではコンパイルエラーを発生させませんが、Linuxでは、makefileを使用してオブジェクトファイルを作成してgcc -cいるときにエラーが発生します。

lvalue required as unary '&' operand 

誰かが問題を教えてもらえますか?

4

2 に答える 2

5

呼び出しの2番目の引数をからに変更 &(UINT8)ui32Abs_Mvd_G_0[0](UINT8 *)ui32Abs_Mvd_G_0ます。

エラーメッセージの理由は、左辺値ではないもののアドレスを取得できないためです。uint32->uint8からのキャストは対象外です。uint32*からuint8*へのキャストは行います。

ところで:あなたは潜在的なエンディアンの間抜けを見ています。リトルエンディアンでは、uint32のLSBのアドレスを渡し、ビッグエンディアンでは、MSBのアドレスを渡します。

于 2013-01-23T09:29:37.117 に答える
0

UINT8非標準です。これは MSVC++ コンパイラに固有のものだと思います。代わりにuint8_tdefined inを使用してみてください。タイプに合わせてstdint.h使います。(uint8_t*)ui32Abs_Mvd_G_0[0]

編集以下のコメントの議論によると、これはうまくいくはずです(UINT8*)ui32Abs_Mvd_G_0[0]

于 2013-01-23T09:19:42.133 に答える