错误 C2668 从站点 http://h264bitstream.sourceforge.net/ 对重载函数代码的模糊调用

Posted

技术标签:

【中文标题】错误 C2668 从站点 http://h264bitstream.sourceforge.net/ 对重载函数代码的模糊调用【英文标题】:Error C2668 ambiguous call to overloaded function code from site http://h264bitstream.sourceforge.net/ 【发布时间】:2012-04-18 07:08:41 【问题描述】:

我运行了一个从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)**
            
        

我应该怎么做才能解决它?

【问题讨论】:

您的代码中没有log,而是log2。为什么?猜测是您将整数传递给log,编译器无法决定您需要浮点数还是双精度结果。 error c2668 ambiguous call to overloaded function 的可能重复项(来自同一用户) log的调用来自哪里? 我认为这是 VS 已知的事情(如果它是 std 行为,则为 idk),如果您可以进行显式转换... 【参考方案1】:

修改对 log2 的调用,如下所示:

log2( (double)(pps->num_slice_groups_minus1 + 1) )

【讨论】:

【参考方案2】:

尝试使用 1.0 而不是 1 作为参数输入。 log(...) 的参数应该是 double、float 或 long double 变量类型。如果不是这种情况,您的变量 num_slice_groups_minus1 也应该是 double、float 或 long double。

例如:log2( pps-&gt;num_slice_groups_minus1 + 1.0 )

【讨论】:

以上是关于错误 C2668 从站点 http://h264bitstream.sourceforge.net/ 对重载函数代码的模糊调用的主要内容,如果未能解决你的问题,请参考以下文章

Qt 5 QWebEngine 页面 printToPdf C2668 对重载函数的模糊调用

ps流来封装h.264数据

如何在 IE 中使用 CORS 从 https 调用 http?

如何获取 h264 视频信息?

H.264再学习 -- 详解 H.264 NALU语法结构

在配置 ffmpeg 时出现错误“未找到 x264”