0

好的,我正在编写代码来修改 .ppm 图像文件。图片被读入并存储在 PPM 类对象中。每个像素都存储在一个 RGB 结构中。最终,它将原始图像中的所有颜色转换为来自小调色板的颜色。它通过使用我创建的距离函数来计算一种颜色与另一种颜色的接近程度。它遍历调色板并将它们插入到地图中,关键是与图像中当前像素的距离。不知何故,我将语法插入地图时弄乱了。有什么帮助吗?

以下是吐出的巨大错误的一部分

support.cpp:在成员函数“void PPM::process1()”中:support.cpp:144:78:错误:没有匹配函数调用“std::pair::pair(float, RGB&)”

这是错误来自的代码部分。它在我如何使用插入功能。我无法让 RGB 类与编译器想要的匹配,并且不确定我做错了什么。

编辑:更新我知道,由于代码目前无法正常工作。我还没有把它冲掉。我喜欢尽早解决语法错误。

void PPM::process1()
{
  // for each pixel {
  //   find  closest qcolor
  //   set pixel color to closest qcolor
  // }
    map<float, RGB()> distanceTest;
    RGB RGBtemp;
    map<float,RGB()>::iterator it;
    for(int i = 0; i < img.size(); ++i){
        for(int j = 0; j < qcolors.size(); ++j){
            RGBtemp = qcolors[j];
            distanceTest.insert(pair<float,RGB()>(img[i].distance(qcolors[j]), RGBtemp));
        }
        it = distanceTest.begin();
        distanceTest.clear();
    }
}

以下是所有相关的标头代码。

typedef unsigned char uchar;
typedef enum { run_process1, run_process2 } pmode_t;

struct RGB {
  // constructor/destructor
    RGB(uchar R=0, uchar G=0, uchar B=0);
      // operator< overload
    float distance(RGB);
    uchar R, G, B;
};

class PPM {
  public:
    PPM();
    ~PPM();

    void read(const string &);
    void write(const string &);
    void write(const string &, const string &);
    void process(pmode_t, const string &);

  private:
    string magicid;
    int nrows, ncols;
    int maxvalue;
    vector<RGB> img;
    vector<RGB> qcolors;

    void read_qcolors(const string &);
    void process1();
    void process2();
};
4

1 回答 1

1

您的模板参数列表语法不正确。省略类型名称后面的括号,你应该没问题:

 map<float, RGB> distanceTest; //no ()

这被称为“最令人头疼的解析”。

于 2014-01-28T21:41:09.613 回答