【问题标题】:fmax and fmin expected an identifier Visual Studio c++ [duplicate]fmax 和 fmin 需要一个标识符 Visual Studio c++ [重复]
【发布时间】:2015-03-23 09:06:59
【问题描述】:
void SplitColors(unsigned char *rgb, int count, unsigned char *r, unsigned char *g, unsigned char *b, unsigned char *y, unsigned char *cb, unsigned char *cr, bool useRGBA)
{
    int multiplier = useRGBA ? 4 : 3;
    for (int i = 0; i < count; i++)
    {
        if (y || cb || cr)
        {
            int yy, ccb, ccr;
            RGB_to_YCbCr(
                rgb[i * multiplier + 0],
                rgb[i * multiplier + 1],
                rgb[i * multiplier + 2],
                yy, ccb, ccr);
            yy = fmax(0, yy);  yy = fmin(255, yy);
            ccb = fmax(0, ccb); ccb = fmin(255, ccb);
            ccr = fmax(0, ccr); ccr = fmin(255, ccr);
            if (y != NULL)
                y[i] = (unsigned char)yy;
            if (cb != NULL)
                cb[i] = (unsigned char)ccb;
            if (cr != NULL)
                cr[i] = (unsigned char)ccr;
        }
        if (r != NULL)
            r[i] = rgb[i * multiplier + 0];
        if (g != NULL)
            g[i] = rgb[i * multiplier + 1];
        if (b != NULL)
            b[i] = rgb[i * multiplier + 2];
    }
}

不明白为什么 fmax 和 fmin 函数在这个函数中不起作用?我已将 yy 等声明为 int?如果我尝试将它们声明为双精度也不起作用...

【问题讨论】:

  • 我正在使用 fyi
  • 你为什么#include &lt;math.h&gt;?它是 C++,#include &lt;cmath&gt;

标签: c++ identifier


【解决方案1】:

fminfmax 作为 C++11 迭代的一部分被引入 C++,我认为 Visual C++ 还不支持它们,至少到 VS2012 为止。

【讨论】:

    【解决方案2】:

    fmaxfmin 是 C++11,但您可以简单地使用 maxmin,因为无论如何您都在 ints 上使用它们。

    此外,由于您使用这两个函数将整数限制在 0..255 范围内,因此您可以为此定义一个函数:

    int clamp(int val, int min = 0, int max = 255)
    {
        return std::min(std::max(val, min), max);
    }
    

    然后像这样使用它:

    yy = clamp(yy);
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2017-04-05
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多