好吧,我正在编写一个代码来修改.ppm映像文件。读取图片并存储在PPM类对象中。每个像素存储在RGB结构中。最终,它将将原始图像中的所有颜色转换为从小颜色托盘中的所有颜色。它通过使用我创建的距离函数来计算一种颜色与另一种颜色有多近的距离来做到这一点。它通过颜色托盘循环,并将它们插入地图中,钥匙是与图像中当前像素的距离。我以某种方式将其插入地图弄乱了语法。有帮助吗?
下面是吐出的巨大错误的一部分
support.cpp:在成员函数'void ppm :: process1()':support.cpp:144:78:错误:呼叫'std :: pair :: pape(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();
};
模板参数列表的语法不正确。按照您的类型的名称省略括号,您应该可以:
map<float, RGB> distanceTest; //no ()
这被称为"最烦人的解析"。