3

サイトhttp://h264bitstream.sourceforge.net/からダウンロードした h264 パーサー プログラムを実行しました。

コードを実行すると、次のエラーが表示されます

エラー C2668: 'log': オーバーロードされた関数へのあいまいな呼び出し
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(575): 'long double log(long double)' の可能性があります
1> c :\program files\microsoft visual studio 10.0\vc\include\math.h(527): または 'float log(float)'
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h( 120): または 'double log(double)'

次のコードで

else if( pps->slice_group_map_type == 6 )
        {
            pps->pic_size_in_map_units_minus1 = bs_read_ue(b);
            for( i = 0; i <= pps->pic_size_in_map_units_minus1; i++ )
            {
                **pps->slice_group_id[ i ] = bs_read_u(b, ceil( log2( pps->num_slice_groups_minus1 + 1 ) ) ); // was u(v)**
            }
        }
    }

エラー C2668: 'log': オーバーロードされた関数へのあいまいな呼び出し 1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(575): 'long double log(long double)' の可能性があります
1> c :\program files\microsoft visual studio 10.0\vc\include\math.h(527): または 'float log(float)'
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h( 120): または 'double log(double)'
1> 次のコードで引数リスト '(int)' を照合しようとしているときに

 if( pps->num_slice_groups_minus1 > 0 &&
        pps->slice_group_map_type >= 3 && pps->slice_group_map_type <= 5)
    {
        sh->slice_group_change_cycle = 
            **bs_read_u(b, ceil( log2( pps->pic_size_in_map_units_minus1 +  
                                     pps->slice_group_change_rate_minus1 + 1 ) ) ); // was u(v) // FIXME add 2?**
    }

エラー C2668: 'log': オーバーロードされた関数へのあいまいな呼び出し 1> c:\program files\microsoft visual studio 10.0\vc\include\math.h(575): 'long double log(long double)' の可能性があります
1> c :\program files\microsoft visual studio 10.0\vc\include\math.h(527): または 'float log(float)'
1> c:\program files\microsoft visual studio 10.0\vc\include\math.h( 120): または 'double log(double)'
1> 引数リスト '(int)' との照合中に

bs_write_ue(b, pps->pic_size_in_map_units_minus1);
            for( i = 0; i <= pps->pic_size_in_map_units_minus1; i++ )
            {
                **bs_write_u(b, ceil( log2( pps->num_slice_groups_minus1 + 1 ) ), pps->slice_group_id[ i ] ); // was u(v)**
            }
        }

解決するにはどうすればよいですか?

4

2 に答える 2

0

log2 への呼び出しを次のように変更します。

log2( (double)(pps->num_slice_groups_minus1 + 1) )
于 2012-11-07T20:51:38.710 に答える
0

パラメータ入力として 1 ではなく 1.0 を使用してみてください。あなたのパラメータはlog(...)、double、float、または long double 変数タイプであることが期待されています。そうでない場合は、変数num_slice_groups_minus1も double、float、または long double にする必要があります。

例:log2( pps->num_slice_groups_minus1 + 1.0 )

于 2015-12-11T10:58:01.163 に答える