好的我正在编写代码来修改.ppm图像文件。 PIC被读入并存储在PPM类对象中。每个Pixel都存储在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();
};
答案 0 :(得分:1)
您的模板参数列表的语法不正确。在你的类型名称后面省略括号,你应该没问题:
map<float, RGB> distanceTest; //no ()